Предложение WHERE для типа данных «Текст» SQL Server - PullRequest
79 голосов
/ 04 декабря 2010

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

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

Я получаю ошибку:

Типы данных TEXT и VARCHAR несовместимы в операторе равенства.

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

Ответы [ 7 ]

92 голосов
/ 04 декабря 2010

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

DECLARE @Village TABLE
        (CastleType TEXT)

INSERT INTO @Village
VALUES
  (
    'foo'
  )

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

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

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

17 голосов
/ 24 января 2013

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

SELECT *
FROM   [Village]
WHERE  CONVERT(VARCHAR, CastleType) = 'foo'
12 голосов
/ 04 декабря 2010

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

4 голосов
/ 20 декабря 2012

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

SELECT *
FROM   [Village]
WHERE  CONVERT(VARCHAR(MAX), [CastleType]) = 'foo'
2 голосов
/ 04 декабря 2010

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

0 голосов
/ 09 ноября 2012

Это работает в MSSQL и MySQL:

SELECT *
FROM   Village
WHERE  CastleType LIKE '%foo%'; 
0 голосов
/ 04 декабря 2010

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

SELECT * FROM [Village] WHERE PATINDEX('foo', [CastleType]) <> 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...