比如一串字符以某定义符号分隔,现我们需要以定义符号对这串字符进行拆分。可以使用XQuery的nodes()方法来实现。实现可参考到这篇:http://www.cnblogs.com/insus/archive/2012/02/25/2367743.html 。不过Insus.NET把实现的方法写成一个自定义函数,在需要的地方调用即可。
udf_StringSplit
SET ANSI_NULLS
ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Insus.NET
-- Create date: 2012-02-26 00:15:00
-- Description: Split the string from the delimiter
-- =============================================
CREATE FUNCTION [ dbo ]. [ udf_SplitString ]
(
@Value NVARCHAR( MAX),
@Delimiter CHAR( 1)
)
RETURNS @SplitResult TABLE ( [ ID ] INT IDENTITY( 1, 1), [ WORD ] NVARCHAR( MAX))
AS
BEGIN
DECLARE @xml XML = CAST( ' <insus> ' + REPLACE( @Value, @Delimiter, ' </insus><insus> ') + ' </insus> ' AS XML)
INSERT INTO @SplitResult( [ WORD ]) SELECT n.value( ' . ', ' NVARCHAR(50) ') AS w
FROM @xml.nodes( ' /insus ') AS E(n)
RETURN
END
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Insus.NET
-- Create date: 2012-02-26 00:15:00
-- Description: Split the string from the delimiter
-- =============================================
CREATE FUNCTION [ dbo ]. [ udf_SplitString ]
(
@Value NVARCHAR( MAX),
@Delimiter CHAR( 1)
)
RETURNS @SplitResult TABLE ( [ ID ] INT IDENTITY( 1, 1), [ WORD ] NVARCHAR( MAX))
AS
BEGIN
DECLARE @xml XML = CAST( ' <insus> ' + REPLACE( @Value, @Delimiter, ' </insus><insus> ') + ' </insus> ' AS XML)
INSERT INTO @SplitResult( [ WORD ]) SELECT n.value( ' . ', ' NVARCHAR(50) ') AS w
FROM @xml.nodes( ' /insus ') AS E(n)
RETURN
END
应用自定义函数:
SELECT
[
ID
],
[
WORD
]
FROM
[
dbo
].
[
udf_SplitString
](
'
ad;gdf;gdf;gdf;dfsdf
',
'
;
')
执行结果: