Каков правильный способ сравнения столбца NTEXT с постоянным значением?
Если я использую что-то вроде
[ntext2] <> '1,032.5',
Я получаю эту ошибку:
Типы данных ntext и varchar несовместимы в не равном оператору.
Лучшим возможным решением было бы, если бы сравнение было реализовано одинаково для любого типа столбца. (< > применим как для NVARCHAR, так и для INT).
Ответы
Ответ 1
Тип данных ntext
устарел в пользу типа данных nvarchar(max)
. Если вы можете изменить тип данных в таблице, это было бы лучшим решением. Тогда нет никакой проблемы, сравнивая его с литералом varchar
.
В противном случае вам нужно будет указать значение перед его сравнением:
cast([ntext2] as nvarchar(max)) <> '1,032.5'
Вы также можете использовать литерал nvarchar, который решает некоторые подобные проблемы с типом данных:
cast([ntext2] as nvarchar(max)) <> N'1,032.5'
Ответ 2
Если вы предпочтете не выполнять бросок, вы можете пройти в некоторых сценариях, используя LIKE
или PATINDEX
, как показано в этом потоке MSDN: http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/6bd4c661-ea0b-435f-af78-097e61549d41
Выражение LIKE без подстановочных знаков будет (в данном случае) примерно эквивалентным тесту для равенства.
В этом случае выражение будет выглядеть следующим образом:
[ntext2] NOT LIKE '1,032.5'