SQL——自定义的fn_Split函数

本文介绍了如何使用SQL创建一个名为fn_Split的函数,用于切分字符串并返回一个包含切分元素的表。通过XML和SQL的结合,实现了高效的数据处理。
--1. 创建fn_Split函数. ( 切分字符串, 返回一个列名为id的表 ) 
IF EXISTS(
       SELECT *
       FROM   dbo.sysobjects
       WHERE  id = OBJECT_ID('fn_Split')
              AND (TYPE = 'FN' OR TYPE = 'TF' OR TYPE = 'IF')
   )
    DROP FUNCTION fn_Split 
GO 
 
CREATE FUNCTION [dbo].[fn_Split]
(
 @str           VARCHAR(MAX),
 @separator     VARCHAR(10)
)
RETURNS TABLE
AS
 RETURN
 (
     --Example:  SELECT id FROM fn_Split('a,b,d,c',',') 
     SELECT B.id
     FROM   (
                (
                    --A 的作用只是生成 '<v>a</v><v>b</v><v>d</v><v>c</v>' 的XML格式的数据, 提供数据源
                    SELECT [value] = CONVERT(XML, '<v>' + REPLACE(@str, @separator, '</v><v>') + '</v>')
                ) A
                OUTER APPLY
                (
                    --B 的作用是将A中的 XML 数据的值枚举出来转换成行
                    SELECT id = N.v.value('.', 'varchar(100)') FROM   A.[value].nodes('/v') N(v)
                ) B
            )
 )
GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值