MySQL의 SUBSTRING_INDEX() 함수와 동일한 SQL Server
MySQL SUBSTRING_INDEX() 함수는 숫자를 기반으로 주어진 문자열에서 하위 문자열을 추출합니다. 지정된 구분 기호의 발생 횟수입니다. SQL Server에서 이 기능을 복제하려면 여러 접근 방식을 사용할 수 있습니다.
한 가지 방법은 T-SQL 및 XQuery를 활용하여 스칼라 함수를 만드는 것입니다.
CREATE FUNCTION dbo.SUBSTRING_INDEX ( @str NVARCHAR(4000), @delim NVARCHAR(1), @count INT ) RETURNS NVARCHAR(4000) WITH SCHEMABINDING BEGIN DECLARE @XmlSourceString XML; SET @XmlSourceString = (SELECT N'<root><row>' + REPLACE( (SELECT @str AS '*' FOR XML PATH('')) , @delim, N'</row><row>' ) + N'</row></root>'); RETURN STUFF ( (( SELECT @delim + x.XmlCol.value(N'(text())[1]', N'NVARCHAR(4000)') AS '*' FROM @XmlSourceString.nodes(N'(root/row)[position() <= sql:variable("@count")]') x(XmlCol) FOR XML PATH(N''), TYPE ).value(N'.', N'NVARCHAR(4000)')), 1, 1, N'' ); END GO
또 다른 접근 방식은 인라인 테이블을 활용하는 것입니다. TSQL의 값 함수:
CREATE FUNCTION dbo.SUBSTRING_INDEX ( @str NVARCHAR(4000), @delim NVARCHAR(1), @count INT ) RETURNS TABLE AS RETURN WITH Base AS ( SELECT XmlSourceString = CONVERT(XML, (SELECT N'<root><row>' + REPLACE( (SELECT @str AS '*' FOR XML PATH('')) , @delim, N'</row><row>' ) + N'</row></root>')) ) SELECT STUFF ( (( SELECT @delim + x.XmlCol.value(N'(text())[1]', N'NVARCHAR(4000)') AS '*' FROM Base b CROSS APPLY b.XmlSourceString.nodes(N'(root/row)[position() <= sql:variable("@count")]') x(XmlCol) FOR XML PATH(N''), TYPE ).value(N'.', N'NVARCHAR(4000)')), 1, 1, N'' ) AS Result; GO
이 두 솔루션 모두 MySQL의 SUBSTRING_INDEX() 함수에 대한 효율적인 대안을 제공하여 두 데이터베이스 시스템 간의 쿼리를 원활하게 포팅할 수 있습니다.
위 내용은 SQL Server에서 MySQL의 SUBSTRING_INDEX() 함수를 복제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!