program story

SQL Server "텍스트"데이터 형식의 WHERE 절

inputbox 2020. 9. 25. 07:50
반응형

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%'; 

참고 URL : https://stackoverflow.com/questions/4350060/where-clause-on-sql-server-text-data-type

반응형