オールキャップの列値を見つけるにはどうすればよいですか?お気に入り LastName = 'SMITH'
の代わりに 'Smith'
ここに私が試していたものがあります...
SELECT *
FROM MyTable
WHERE FirstName = UPPER(FirstName)
大文字と小文字を区別する照合を強制できます。
select * from T
where fld = upper(fld) collate SQL_Latin1_General_CP1_CS_AS
試して
SELECT *
FROM MyTable
WHERE FirstName = UPPER(FirstName) COLLATE SQL_Latin1_General_CP1_CS_AS
この照合により、大文字と小文字を区別した比較が可能になります。
クエリで大文字と小文字を区別する照合を指定する必要がないようにデータベースの照合を変更する場合は、次の手順を実行する必要があります( from MSDN ):
1)ユーザーデータベースとその中のすべてのオブジェクトを再作成するために必要なすべての情報またはスクリプトがあることを確認します。
2)bcpユーティリティなどのツールを使用して、すべてのデータをエクスポートします。
3)すべてのユーザーデータベースを削除します。
4)setupコマンドのSQLCOLLATIONプロパティで新しい照合を指定して、masterデータベースを再構築します。例えば:
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName
/SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ]
/SQLCOLLATION=CollationName
5)すべてのデータベースとその中のすべてのオブジェクトを作成します。
6)すべてのデータをインポートします。
次のように大文字と小文字を区別するサーバー照合を使用する必要があります。
SELECT *
FROM MyTable
WHERE FirstName = UPPER(FirstName) Collate SQL_Latin1_General_CP1_CS_AS
デフォルトでは、SQL比較では大文字と小文字が区別されません。
試して
SELECT *
FROM MyTable
WHERE FirstName = LOWER(FirstName)
そのための簡単なUDF
を作成しました。
create function dbo.fnIsStringAllUppercase(@input nvarchar(max)) returns bit
as
begin
if (ISNUMERIC(@input) = 0 AND RTRIM(LTRIM(@input)) > '' AND @input = UPPER(@input COLLATE Latin1_General_CS_AS))
return 1;
return 0;
end
その後、WHERE
句の任意の列で簡単に使用できます。
OPの例を使用するには:
SELECT *
FROM MyTable
WHERE dbo.fnIsStringAllUppercase(FirstName) = 1
これをwhere句として使用してみてください。
WHERE PATINDEX(FirstName + '%',UPPER(FirstName)) = 1
ご覧ください こちら
いくつかのオプションがあるようです
文字列をVARBINARY(length)にキャストします
cOLLATEを使用して、大文字と小文字を区別する照合を指定します
比較する文字列のBINARY_CHECKSUM()を計算します
テーブル列のCOLLATIONプロパティを変更する
計算列を使用する(VARBINARYの暗黙的な計算)
ケースセンシティブ検索:SQL Serverでの小文字または大文字の文字列の取得 で良い例を見つけることができます
これを試して
SELECT *
FROM MyTable
WHERE UPPER(FirstName) COLLATE Latin1_General_CS_AS = FirstName COLLATE Latin1_General_CS_AS