>  기사  >  데이터 베이스  >  SQL Server에서 MySQL의 SUBSTRING_INDEX() 함수를 복제하는 방법은 무엇입니까?

SQL Server에서 MySQL의 SUBSTRING_INDEX() 함수를 복제하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-16 01:36:02827검색

How to Replicate MySQL's SUBSTRING_INDEX() Function in SQL Server?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.