"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como obter a funcionalidade SUBSTRING_INDEX do MySQL no SQL Server 2012?

Como obter a funcionalidade SUBSTRING_INDEX do MySQL no SQL Server 2012?

Publicado em 2024-12-21
Navegar:467

How to Achieve MySQL's SUBSTRING_INDEX Functionality in SQL Server 2012?

Equivalente do SQL Server à função substring_index no MySQL

A função substring_index no MySQL é usada para extrair uma substring de uma string especificada antes de uma determinada número de ocorrências de um delimitador. Para obter funcionalidade semelhante no SQL Server 2012, você pode empregar uma das seguintes abordagens:

Função escalar T-SQL:

CREATE FUNCTION dbo.SUBSTRING_INDEX
(
    @str NVARCHAR(4000),
    @delim NVARCHAR(1),
    @count INT
)
RETURNS NVARCHAR(4000)
WITH SCHEMABINDING
BEGIN
    -- Convert the string to an XML document for processing
    DECLARE @XmlSourceString XML;
    SET @XmlSourceString = (SELECT N'<root><row>'   REPLACE( (SELECT @str AS '*' FOR XML PATH('')) , @delim, N'</row><row>' )   N'</row></root>');

    -- Extract the desired substring using XQuery
    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

-- Example usage
SELECT dbo.SUBSTRING_INDEX(N'www.somewebsite.com', N'.', 2) AS Result;

Função com valor de tabela embutida T-SQL:

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

-- Example usage
SELECT  *
FROM    (
    SELECT N'www.somewebsite.com' UNION ALL 
    SELECT N'www.yahoo.com' UNION ALL 
    SELECT N'www.outlook.com'
) a(Value)
CROSS APPLY dbo.SUBSTRING_INDEX(a.Value, N'.', 2) b;

Essas funções permitem replicar o comportamento da função substring_index do MySQL no SQL Server, permitindo que você execute tarefas de extração de substring de forma portável .

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3