SQL Server XML 데이터 형식에서 LIKE 문 사용
varchar 필드가있는 SELECT * FROM TABLE WHERE ColumnA LIKE '%Test%'
경우 해당 열에 특정 문자열이 포함되어 있는지 쉽게 확인할 수 있습니다 .
XML 유형에 대해 어떻게 수행합니까?
'텍스트'노드가있는 행만 반환하는 다음이 있지만 해당 노드 내에서 검색해야합니다.
select * from WebPageContent where data.exist('/PageContent/Text') = 1
이 작업을 아주 쉽게 할 수 있어야합니다.
SELECT *
FROM WebPageContent
WHERE data.value('(/PageContent/Text)[1]', 'varchar(100)') LIKE 'XYZ%'
이 .value
메서드는 실제 값을 제공하고이를 VARCHAR ()로 반환되도록 정의 할 수 있으며, 그런 다음 LIKE 문으로 확인할 수 있습니다.
이건 엄청 빠르지는 않을 거라는 걸 명심하세요. 따라서 XML에 많은 검사가 필요한 특정 필드가있는 경우 다음을 수행 할 수 있습니다.
- XML을 가져오고 찾고있는 값을 VARCHAR ()로 반환하는 저장된 함수를 만듭니다.
- 이 함수를 호출하는 테이블에 새 계산 필드를 정의하고 PERSISTED 열로 만듭니다.
이를 통해 기본적으로 XML의 특정 부분을 계산 된 필드로 "추출"하고 지속되도록 만든 다음이를 매우 효율적으로 검색 할 수 있습니다 (해당 필드를 INDEX 할 수도 있습니다!).
마크
또 다른 옵션은 XML을 nvarchar로 캐스팅 한 다음 XML vas가 nvarchar 필드 인 것처럼 주어진 문자열을 검색하는 것입니다.
SELECT *
FROM Table
WHERE CAST(Column as nvarchar(max)) LIKE '%TEST%'
이 솔루션은 깨끗하고 기억하기 쉬우 며 엉망이되기 어렵고 where 절의 일부로 사용할 수 있으므로이 솔루션을 좋아합니다.
편집 : Cliff가 언급했듯이 다음을 사용할 수 있습니다.
... varchar로 변환되지 않는 문자가있는 경우 nvarchar
또 다른 옵션은 XML을 문자열로 변환 한 다음 LIKE를 사용하여 문자열로 검색하는 것입니다. 그러나 계산 된 열은 WHERE 절의 일부가 될 수 없으므로 다음과 같이 다른 SELECT로 래핑해야합니다.
SELECT * FROM
(SELECT *, CONVERT(varchar(MAX), [COLUMNA]) as [XMLDataString] FROM TABLE) x
WHERE [XMLDataString] like '%Test%'
이것은 marc_s 대답을 기반으로 사용할 것입니다.
SELECT
SUBSTRING(DATA.value('(/PAGECONTENT/TEXT)[1]', 'VARCHAR(100)'),PATINDEX('%NORTH%',DATA.value('(/PAGECONTENT/TEXT)[1]', 'VARCHAR(100)')) - 20,999)
FROM WEBPAGECONTENT
WHERE COALESCE(PATINDEX('%NORTH%',DATA.value('(/PAGECONTENT/TEXT)[1]', 'VARCHAR(100)')),0) > 0
검색 기준이있는 검색에서 하위 문자열을 반환합니다.
참고 URL : https://stackoverflow.com/questions/1832987/use-a-like-statement-on-sql-server-xml-datatype
'programing tip' 카테고리의 다른 글
OAuth 소비자 비밀을 안전하게 유지하는 방법과 손상되었을 때 대응하는 방법은 무엇입니까? (0) | 2020.10.20 |
---|---|
웹 앱 개발에 Ionic Framework를 사용하는 방법은 무엇입니까? (0) | 2020.10.20 |
SQL Server가 서명되지 않은 데이터 형식을 지원하지 않는 이유는 무엇입니까? (0) | 2020.10.19 |
ASP.NET CLR이 활성화되지 않음 (0) | 2020.10.19 |
CSV 리더 (Python)의 "줄에 NULL 바이트 포함" (0) | 2020.10.19 |