0

簡単に言えば、database何十万ものエントリと何百もの異なる列を持つ非常に大きなものがあります。

これらの列の一部は、スペースなどを節約するためにハッシュする必要があります。ただし、次のようにハッシュしようとすると:

select distinct
columnA + hashbytes('sha1', [Column_in_question]) 
from [dbo].[Tabled_in_question]

これを行った場合よりも多くの行が得られます。

select distinct
columnA + [Column_in_question]
from [dbo].[Tabled_in_question]

私の最善の推測は、選択した個別は大文字と小文字を区別しないのに対し、Hashbytes は大文字と小文字を区別するということです。しかし、これをテストまたは修正する方法がよくわかりません。

何か案は?

4

1 に答える 1

0

あなたは正しいです違いは大文字と小文字の区別です

を使用して確認できます

select distinct
convert(VARBINARY(10), [Column_in_question]),
columnA + hashbytes('sha1', [Column_in_question]) 
from [dbo].[Tabled_in_question]

db の照合はおそらく CI (大文字と小文字を区別しない) ですが、hashbytes は .. バイトを使用し、テキストを varbinary に変換することがわかるように、それらは異なります。

これを試して、照合と比較のルールを変更してください

select distinct
columnA + [Column_in_question] collate LATIN1_GENERAL_BIN
from [dbo].[Tabled_in_question]
于 2017-01-11T10:46:05.323 に答える