Подтвердить что ты не робот

Предложение WHERE в SQL Server Тип данных "Текст"

Где [CastleType] устанавливается как тип данных "текст" в SQL Server, а запрос:

SELECT *
FROM   [Village]
WHERE  [CastleType] = 'foo' 

Я получаю сообщение об ошибке:

Типы данных ТЕКСТ и VARCHAR несовместимы с равным оператору.

Могу ли я не запрашивать этот тип данных с предложением WHERE?

4b9b3361

Ответ 1

Вы можете использовать LIKE вместо =. Без каких-либо подстановочных знаков это будет иметь тот же эффект.

DECLARE @Village TABLE
        (CastleType TEXT)

INSERT INTO @Village
VALUES
  (
    'foo'
  )

SELECT *
FROM   @Village
WHERE  [CastleType] LIKE 'foo' 

text устарел. Сменять на varchar(max) будет легче работать.

Также насколько велики данные, которые могут быть? Если вы собираетесь проводить сравнительные сравнения, вам желательно индексировать этот столбец. Это невозможно, если вы объявляете столбец как нечто большее, чем 900 байт, хотя вы можете добавить вычисленный столбец checksum или hash, который можно использовать для ускорения запроса этого типа.

Ответ 2

Пожалуйста, попробуйте

SELECT *
FROM   [Village]
WHERE  CONVERT(VARCHAR, CastleType) = 'foo'

Ответ 3

Вы не можете сравнивать с text с оператором =, но вместо этого должны использовать одну из перечисленных функций сравнения здесь. Также обратите внимание на большой предупреждающий ящик в верхней части страницы, это важно.

Ответ 4

Это не то, о чем говорится в сообщении об ошибке. В нем говорится, что вы не можете использовать оператор =. Попробуйте, например, LIKE 'foo'.

Ответ 5

Если вы не можете изменить тип данных в самой таблице, чтобы использовать varchar (max), измените свой запрос на это:

SELECT *
FROM   [Village]
WHERE  CONVERT(VARCHAR(MAX), [CastleType]) = 'foo'

Ответ 6

Другой вариант:

SELECT * FROM [Village] WHERE PATINDEX('foo', [CastleType]) <> 0

Ответ 7

Я использую MySQL, и этот запрос работает для меня:

SELECT *
FROM   @Village
WHERE  CastleType LIKE '%foo%';