查询以查找字符大小写不同的字符串组

时间:2018-11-24 14:22:30

标签: sql sql-server tsql

我有一个带有记录的列的SQL Server表:

  1. 具有不同字符大小写变体的字符串(在下面的示例中) 各种变体中的“丰田”和“本田”)或
  2. 仅具有一个变体的字符串(在下面的示例“ BMW”中)
Id  Make
1   HONDA
2   Honda
3   TOYOTA
4   Toyota
5   toyota
6   BMW
7   BMW

我需要编写查询以仅显示具有不同字符大小写变体的字符串。数据库设置为不区分大小写。

结果类似于

honda
toyota

2 个答案:

答案 0 :(得分:1)

您可以将EXISTS()用作

SELECT Make
FROM T T1
WHERE EXISTS(
              SELECT 1
              FROM T
              WHERE Make = UPPER(T1.Make)
                    AND
                    Make != T1.Make collate Latin1_General_CS_AS
);

甚至

SELECT LOWER(Make) Make
FROM T T1
WHERE EXISTS(
              SELECT 1
              FROM T
              WHERE Make = UPPER(T1.Make)
                    AND
                    Make != T1.Make collate Latin1_General_CS_AS
)
GROUP BY LOWER(Make);

Demo

答案 1 :(得分:0)

您需要区分大小写的排序规则来进行比较。这是一个简单的方法:

select lower(str)
from (values ('honda'), ('Honda'), ('x'), ('x')) v(str)
group by lower(str)
having min(str collate Latin1_General_CS_AS) <> max(str collate Latin1_General_CS_AS);