如何使用MS SQL中的LIKE语句从表中选择包含大写字母的行仅包含西里尔字符的行

时间:2015-09-09 06:35:16

标签: sql sql-server

我想选择列[Name]只包含大写字母中的西里尔字符的行,以及使用LIKE的表格中的逗号和连字符:

SELECT  *
FROM    Clients
WHERE   NAME    LIKE '%[А-Я][,-]%' COLLATE Cyrillic_General_CS_AS

或使用显式模式:

SELECT *
FROM Clients
WHERE NAME LIKE '%[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ][,-]%' COLLATE Cyrillic_General_CS_AS

但是这些选择了模式中至少存在一个字符的行(但允许模式中不存在任何其他字符)。

也许使用^(NOT谓词)排除任何其他字符:

SELECT  *
FROM    Clients
WHERE   NAME    LIKE '%[^A-Z][./=+]%' COLLATE Cyrillic_General_CS_AS

但这需要枚举大量不必要的字符。

如何做出最佳选择?

1 个答案:

答案 0 :(得分:0)

使用双阴性。在您感兴趣的集合中搜索中至少包含一个字符而不是的行:

SELECT *
FROM Clients
WHERE NAME NOT LIKE '%[^-АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ,]%' COLLATE Cyrillic_General_CS_AS

(我不太确定你是通过将连字符和逗号放在单独的分组中来尝试做什么的,但我现在已将它们移到同一组中,因为这似乎有些意义)