2

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

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

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

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

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

Soundex не будет делать это как Саундэкс же для 2-х аналогичных строк

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

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

ответ

3

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

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

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 
+0

Yup, легко, никогда меня не поразило. – ram

+0

Как насчет сравнения varchar? –

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 
Смежные вопросы