0

我当前的代码工作并突出显示带有非法(隐藏)字符的电子邮件地址,这些字符会进入下游系统并破坏它们。问题是可以使语句更有效,并说搜索 CHAR(1) 和 CHAR(31) 之间的任何字符,而不是列出每一行吗?

SELECT * FROM [Table1].[customer]
  where  
EMAIL_ADDR like '%'+CHAR(1) +'%' or
EMAIL_ADDR like '%'+CHAR(2) +'%' or
EMAIL_ADDR like '%'+CHAR(3) +'%' or
EMAIL_ADDR like '%'+CHAR(4) +'%' or
EMAIL_ADDR like '%'+CHAR(5) +'%' or
EMAIL_ADDR like '%'+CHAR(6) +'%' or
EMAIL_ADDR like '%'+CHAR(7) +'%' or
EMAIL_ADDR like '%'+CHAR(8) +'%' or
EMAIL_ADDR like '%'+CHAR(9) +'%' or
EMAIL_ADDR like '%'+CHAR(10)+'%'  or
EMAIL_ADDR like '%'+CHAR(11)+'%'  or
EMAIL_ADDR like '%'+CHAR(12)+'%'  or
EMAIL_ADDR like '%'+CHAR(13)+'%'  or
EMAIL_ADDR like '%'+CHAR(14)+'%'  or
EMAIL_ADDR like '%'+CHAR(15)+'%'  or
EMAIL_ADDR like '%'+CHAR(16)+'%'  or
EMAIL_ADDR like '%'+CHAR(17)+'%'  or
EMAIL_ADDR like '%'+CHAR(18)+'%'  or
EMAIL_ADDR like '%'+CHAR(19)+'%'  or
EMAIL_ADDR like '%'+CHAR(20)+'%'  or
EMAIL_ADDR like '%'+CHAR(21)+'%'  or
EMAIL_ADDR like '%'+CHAR(22)+'%'  or
EMAIL_ADDR like '%'+CHAR(23)+'%'  or
EMAIL_ADDR like '%'+CHAR(24)+'%'  or
EMAIL_ADDR like '%'+CHAR(25)+'%'  or
EMAIL_ADDR like '%'+CHAR(26)+'%'  or
EMAIL_ADDR like '%'+CHAR(27)+'%'  or
EMAIL_ADDR like '%'+CHAR(28)+'%' or
EMAIL_ADDR like '%'+CHAR(29)+'%' or
EMAIL_ADDR like '%'+CHAR(30)+'%' or
EMAIL_ADDR like '%'+CHAR(31)+'%'
4

1 回答 1

0

在 SQL Server 中,您应该能够使用字符类:

where EMAIL_ADDR like '%[' + CHAR(1) + CHAR(2) + CHAR(3) + . . . ']%' 

但是,检查允许的字符可能更简单:

where email_addr like '%[-a-zA-Z0-9_.@]%'

或您允许的任何字符列表。

于 2021-07-02T10:16:32.863 回答