具体来说,是Sql Server 2005/T-Sql.我有一个字段,主要是一系列的两个字符,并且它们都应该是大写的,但是有一些遗留数据早于当前的DB/System,我需要弄清楚哪些记录违反了上层套管契约.
我认为这会奏效:
select * from tbl where ascii(field1) <> ascii(upper(field1))
事实上它给了我一些记录.它们已被纠正,现在该查询不返回任何数据.但是我有人告诉我数据库中仍然存在混合的案例数据,我刚刚找到一个例子:'FS'和'Fs'都报告了相同的ascii值.
为什么这种方法存在缺陷?有什么更好的方法来解决这个问题,或者我如何才能使这种方法正常工作?
如果所有日期都应该是大写的,只需做一个更新
update tbl set field1 = upper(field1)
但要回答您的原始问题,此查询应该为您提供您期望的结果:
select * from tbl where field1 COLLATE Latin1_General_CS_AS <> upper(field1)
编辑:刚刚注意到使用COLLATE的建议也是由Ian发布的