source

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

manycodes 2023. 4. 11. 22:12
반응형

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

여기서 [CastleType]은 SQL Server에서 데이터 유형 "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)같이 일하기가 더 쉬울 거예요.

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

이거 드셔보세요

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

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

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

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

반응형