сравнение varchar в SQL Server - PullRequest
2 голосов
/ 22 мая 2010

Я ищу некоторую функцию сравнения SQL varchar, такую ​​как C # string.compare (сейчас мы можем игнорировать регистр, должен возвращать ноль, если символьное выражение одинаково, и ненулевое выражение, когда они разные)

В основном у меня есть буквенно-цифровой столбец в одной таблице, который необходимо проверить в другой таблице.

Я не могу выбрать A.col1 - B.col1 из (запроса), так как оператор "-" не может быть применен к символьным выражениям

Я не могу привести свое выражение к типу int (а затем выполнить различие / вычитание), поскольку оно терпит неудачу

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

Soundex не будет делать это, так как soundex одинаков для 2 похожих строк

Difference не будет делать это как select difference('abc','ABC') = 4 ( в соответствии с msdn , разница - это разница в soundex для двухсимвольных выражений, а разница = 4 означает наименее различную)

Я могу написать curson для сравнения ascii для каждого буквенно-цифрового символа в каждой строке, но мне было интересно, есть ли другой способ сделать это?

Ответы [ 2 ]

3 голосов
/ 22 мая 2010

мы можем пока игнорировать регистр, должны возвращать ноль, если символьное выражение одинаково, и ненулевое выражение, когда они разные

Если это все, что вы хотите, вы можете просто использовать это:

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

Обратите внимание, что это выражение возвращает 1, если один из аргументов равен NULL. Это, вероятно, не то, что вы хотите. Вы можете использовать следующее, чтобы вернуть 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
1 голос
/ 22 мая 2010
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
...