2010年8月2日月曜日

[SQL]大文字・小文字が異なる場合のみを抽出する(SQLServer)

SQLServerでは大文字と小文字を区別しません。Oracleはどうなんだろう?
で、先日、大文字で登録されたデータと小文字で登録されたデータの混在があり、困っている。と相談されました。
SQL上では'A'='a'がなりたちますが、プログラム側では'A'≠'a'なので、その辺で困っている模様でした。

とりあえず、
update T_TEST2 SET text1=upper(text1)


でできるんじゃない?と教えてあげたのですが、対象のレコードと個数が知りたい。とのことでした。
ということで、これで、いかが?と提示したところ、喜んでかえって行きました。

--だめな例
--select * from T_TEST2 where text1<>upper(text1)
--OKな例
select * from T_TEST2 where convert(varbinary,text1)<>convert(varbinary,upper(text1))


convertのvarbinaryは、指定の値を16進数で表現します。ソレをUPPERと組み合わせて差が出たものが対象。という事になります。
他のDBでも同じようなストアド・関数があれば実現できると思います。

0 件のコメント :