[sql-server] SQL Server “텍스트”데이터 형식의 WHERE 절

SQL Server에서 [CastleType]이 데이터 형식 “text”로 설정되고 쿼리는 다음과 같습니다.

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

오류가 발생합니다.

데이터 유형 TEXTVARCHAR 은 같음 연산자에서 호환되지 않습니다.

WHERE 절을 사용하여이 데이터 유형을 쿼리 할 수 ​​없습니까?



답변

LIKE대신 사용할 수 있습니다 =. 와일드 카드가 없으면 동일한 효과가 있습니다.

DECLARE @Village TABLE
        (CastleType TEXT)

INSERT INTO @Village
VALUES
  (
    'foo'
  )

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

text더 이상 사용되지 않습니다. 로 변경하면 작업하기 varchar(max)가 더 쉽습니다.

또한 데이터의 크기는 얼마나 될까요? 동등 비교를 수행하려는 경우 이상적으로이 열을 색인화하는 것이 좋습니다. 이 유형의 쿼리 속도를 높이는 데 사용할 수 있는 계산 된 열 checksum이나 hash열을 추가 할 수 있지만 열을 900 바이트보다 넓은 것으로 선언하는 경우에는 불가능 합니다.


답변

이것을 시도하십시오

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


답변

당신은 비교할 수없는 text=연산자 여기에 나열된 비교 함수 중 하나를 사용해야합니다 . 또한 페이지 상단에있는 큰 경고 상자도 중요합니다.


답변

varchar (max)를 사용하도록 테이블 자체의 데이터 유형을 변경할 수없는 경우 쿼리를 다음과 같이 변경합니다.

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


답변

그것은 오류 메시지가 말하는 것이 아닙니다. =연산자를 사용할 수 없다고합니다 . 예를 들어보십시오 LIKE 'foo'.


답변

또 다른 옵션은 다음과 같습니다.

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


답변

이것은 MSSQL 및 MySQL에서 작동합니다.

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