栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SQL Server相当于MySQL中的substring_index函数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL Server相当于MySQL中的substring_index函数

尝试基于T-SQL和XQuery(

(root/row)[position() <= sql:variable("@count")]
)的以下解决方案:

T-SQL标量函数:

CREATE FUNCTION dbo.SUBSTRING_INDEX(    @str NVARCHAr(4000),    @delim NVARCHAr(1),    @count INT)RETURNS NVARCHAr(4000)WITH SCHEMABINDINGBEGIN    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''    );ENDGOSELECt dbo.SUBSTRING_INDEX(N'www.somewebsite.com', N'.', 2) AS Result;

输出:

要么

TSQL内联表值函数:

CREATE FUNCTION dbo.SUBSTRING_INDEX(    @str NVARCHAr(4000),    @delim NVARCHAr(1),    @count INT)RETURNS TABLEAS 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;GOSELECt  *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;

输出:



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387957.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号