两个条件在同一列上

时间:2015-08-11 03:16:33

标签: sql sql-server sql-server-2008

状态表有几种状态。我想要这样的查询。

select * from command where status <> 's' and status<> 'sc'

但查询使用'Status'S检索数据。 那是什么问题?

3 个答案:

答案 0 :(得分:5)

状态是数据库S还是s

尝试

select * from command where lower(status) NOT IN ('s', 'sc')

答案 1 :(得分:2)

试试吧..无需检查下限或上限。它搜索所有字母(不区分大小写)。

select * from command where status NOT IN ('s', 'sc')

如果你想添加区分大小写的条件,那么你必须像这样使用..

select * from command where status COLLATE Latin1_General_CS_AS NOT IN ('s', 'sc')

答案 2 :(得分:0)

检查Col <> 's'取决于列的整理。如果排序规则不区分大小写,则'S' = 's'并且您的检查不会返回S。如果您的排序规则区分大小写(我认为是这种情况),则会返回S

例如,请注意以下两个排序规则Latin1_General_CI_AS_KS_WSLatin1_General_CS_AS_KS_WS。请注意CICS的区别。

SELECT 'S' WHERE 'S' <> 's' COLLATE Latin1_General_CI_AS_KS_WS

不返回任何内容

SELECT 'S' WHERE 'S' <> 's' COLLATE Latin1_General_CS_AS_KS_WS

返回S

回到您的查询。如果这种不区分大小写的检查是一次性的事情,您可以按照其他答案的建议执行UPPER(Col) / LOWER(Col)或使用COL COLLATE Latin1_General_CI_AS_KS_WS

如果所有比较都不区分大小写,我建议changing the collation of the column本身。