SQL Server에서 [CastleType]이 데이터 형식 “text”로 설정되고 쿼리는 다음과 같습니다.
SELECT *
FROM [Village]
WHERE [CastleType] = 'foo'
오류가 발생합니다.
데이터 유형 TEXT 및 VARCHAR 은 같음 연산자에서 호환되지 않습니다.
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%';