3

C#string.compareのようなSQL varchar比較関数を探しています(今のところ大文字と小文字は無視できます。文字式が同じ場合はゼロを返し、異なる場合はゼロ以外の式を返す必要があります)

基本的に、あるテーブルに英数字の列があり、別のテーブルで検証する必要があります。

文字式に「-」演算子を適用できないため、(クエリ)からA.col1-B.col1を選択できません

式が失敗するため、式をintとしてキャストできません(その後、差/減算を実行できません)

select cast ('ASXT000R' as int)
Conversion failed when converting varchar 'ASXT000R'  to int 

Soundexsoundexは2つの類似した文字列で同じであるため、それは行われません。

Differenceselect difference('abc','ABC')= 4としては実行されません( msdnによると、違いは2つの文字式のsoundexの違いであり、違い= 4は最も違いが少ないことを意味します)

各行の英数字ごとにASCII比較を行うためのカーソンを書くことはできますが、他に方法があるかどうか疑問に思いました。

4

2 に答える 2

3

今のところ大文字と小文字は無視できます。文字式が同じ場合はゼロを返し、異なる場合はゼロ以外の式を返す必要があります

それがあなたが望むすべてであるならば、あなたはただこれを使うことができます:

CASE WHEN 'a' = 'b' THEN 0 ELSE 1 END

いずれかの引数がNULLの場合、この式は1を返すことに注意してください。これはおそらくあなたが望むものではありません。いずれかの引数がNULLの場合、以下を使用してNULLを返すことができます。

CASE WHEN 'a' = 'b' THEN 0
     WHEN 'a' <> 'b' THEN 1
END

「大きい」と比較するものに応じて負の値と正の値が必要な場合は、代わりにこれを使用できます。

CASE WHEN 'a' < 'b' THEN -1 
     WHEN 'a' = 'b' THEN 0
     WHEN 'a' > 'b' THEN 1
END
于 2010-05-22T18:01:14.877 に答える
1
select case when a.col1 = b.col1 then 0 else 1 end from a join b on a.id = b.id

また

select case when lower(a.col1) = lower(b.col1) then 0 else 1 end from a join b on a.id = b.id
于 2010-05-22T18:02:01.710 に答える