仅从具有日语名称的表中选择特殊字符

时间:2018-08-08 10:23:13

标签: sql sql-server

我在日语名称表上使用SQL Server。我正在尝试返回任何包含特殊字符(例如-/ $)的字段,但它还返回任何日语字符。

select names from nameTable
where 
(names <> '' and names not like N'%[a-z0-9]%')

我正在使用上述各种版本来获取结果,并且它可以完成技术工作。

只是想知道是否有人对如何从结果中排除日语字符提出建议。

如果需要更多信息,请询问。

2 个答案:

答案 0 :(得分:1)

您的查询无效,因为您在LIKE子句中指定了ASCII字符。因此,所有非ASCII字符(包括日语字符)都会显示在您的结果中。

可能会有更好的答案(包括@denial建议创建CLR函数)。但是另一种可能的解决方案是对所需的特殊字符进行硬编码。像这样:

select * from JapaneseText
where 
    chars like N'%[[!"#$%&''()*+`-./:;<=>?@\^_]%'
    -- separate check for ']', to avoid it 
    -- being interpreted as the end of the character class
    or chars like N'%]%'

当然,这些只是ASCII表中的特殊字符。您必须调整解决方案以处理更多字符(智能引号,破折号等),但是那样的话,它确实开始变得笨拙,因此最好从另一个角度着手。

答案 1 :(得分:0)

请记住,您应该为此使用CLR UDF。在我看来,LIKE无法实现这一目标。
那就是您可以进行装配,例如。用C#编写,可以从给定列返回正则表达式匹配项。有关CLR UDF的更多信息,请访问:https://www.red-gate.com/simple-talk/sql/t-sql-programming/clr-assembly-regex-functions-for-sql-server-by-example/