如何在 SQL 服务器中搜索具有特殊字符的文本?
How to search in SQL Server for text that has special characters?
我有一个 SQL 服务器 table 有一个 TEXT
类型的列,可以以不同的格式存储求职者的简历。 RTF 是最常见的一种,但我们经常从第三方转换器获取简历数据,该转换器将简历存储为特殊字符(可能是 Unicode,或者我不知道它们是什么)。
如何搜索我的 table 以找到所有包含这些特殊字符的行?比如id = 4,6,7,9等的行都是特殊字符的记录。
这些特殊字符叫什么格式?统一码??
假设“特殊”字符是指可打印 ASCII 和某些常见空白字符集之外的任何字符,您可以尝试以下操作:
DECLARE @SpecialPattern VARCHAR(100) =
'%[^'
+ CHAR(9) + CHAR(10) + CHAR(13) -- tab, CR, LF
+ CHAR(32) + '-' + CHAR(126) -- Range from space to last printable ASCII
+ ']%'
SELECT
RESUME_TEXT,
cast(left(cast(resume_text as varchar(max)),20) as varbinary(max))` -- Borrowed from userMT's comment
FROM RESUME
WHERE RESUME_TEXT LIKE @SpecialPattern COLLATE Latin1_General_Bin -- Use exact compare
对于一些完全有效的扩展字符,例如文本中可能存在的重音元音、弯引号或 m- 和 n- 破折号,您可能会得到一些误击。
我的第一个想法是奇怪的字符可能是 UTF-8 BOM(十六进制 EF、BB、BF),但显示似乎与我期望的不符 SQL 服务器渲染它们。默认 windows 代码页 (1252) 中根本不存在反点。
我们至少需要一些十六进制数据(至少前几个字节)来提供进一步的帮助。通常,常见的二进制文件类型在前 3-5 个字节中具有可识别的签名。
我有一个 SQL 服务器 table 有一个 TEXT
类型的列,可以以不同的格式存储求职者的简历。 RTF 是最常见的一种,但我们经常从第三方转换器获取简历数据,该转换器将简历存储为特殊字符(可能是 Unicode,或者我不知道它们是什么)。
如何搜索我的 table 以找到所有包含这些特殊字符的行?比如id = 4,6,7,9等的行都是特殊字符的记录。
这些特殊字符叫什么格式?统一码??
假设“特殊”字符是指可打印 ASCII 和某些常见空白字符集之外的任何字符,您可以尝试以下操作:
DECLARE @SpecialPattern VARCHAR(100) =
'%[^'
+ CHAR(9) + CHAR(10) + CHAR(13) -- tab, CR, LF
+ CHAR(32) + '-' + CHAR(126) -- Range from space to last printable ASCII
+ ']%'
SELECT
RESUME_TEXT,
cast(left(cast(resume_text as varchar(max)),20) as varbinary(max))` -- Borrowed from userMT's comment
FROM RESUME
WHERE RESUME_TEXT LIKE @SpecialPattern COLLATE Latin1_General_Bin -- Use exact compare
对于一些完全有效的扩展字符,例如文本中可能存在的重音元音、弯引号或 m- 和 n- 破折号,您可能会得到一些误击。
我的第一个想法是奇怪的字符可能是 UTF-8 BOM(十六进制 EF、BB、BF),但显示似乎与我期望的不符 SQL 服务器渲染它们。默认 windows 代码页 (1252) 中根本不存在反点。
我们至少需要一些十六进制数据(至少前几个字节)来提供进一步的帮助。通常,常见的二进制文件类型在前 3-5 个字节中具有可识别的签名。