状态表有几种状态。我想要这样的查询。
select * from command where status <> 's' and status<> 'sc'
但查询使用'Status'S检索数据。 那是什么问题?
答案 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_WS
和Latin1_General_CS_AS_KS_WS
。请注意CI
和CS
的区别。
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本身。