0
我有一个称为拆分的表值函数。该函数需要2个字符串。它会根据第二个字符串的值将第一个字符串拆分为多行。一个拆分函数来提取字符串“去”
我想要在'go'语句中分割sql的函数。问题是,当它在sql中的任何位置找到字符串“go”时,它将会拆分sql字符串。我需要它在字符串'go'上分开,只有当它自己在一行时。有任何想法吗?我希望不必重写函数,而是以某种(希望简单的)方式修改它。
IF EXISTS (SELECT * FROM sys.objects WHERE
type = 'TF' AND name = 'Split')
BEGIN
DROP FUNCTION [dbo].[Split]
END
GO
CREATE FUNCTION dbo.Split
(
@RowData nvarchar(MAX),
@SplitOn nvarchar(50)
)
RETURNS @RtnValue table
(
Id int identity(1,1),
Data nvarchar(MAX)
)
AS
BEGIN
Declare @Cnt int
DECLARE @tst varchar(MAX)
Set @Cnt = 1
While (Charindex(@SplitOn,@RowData)>0)
Begin
Select
@tst = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)));
Insert Into @RtnValue (data)
Select
Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))
Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+2,len(@RowData))
Set @Cnt = @Cnt + 1
End
Insert Into @RtnValue (data)
Select Data = ltrim(rtrim(@RowData))
Return
END
GO
-- test out the function
SELECT data
FROM dbo.Split('
begin transaction;
go
alter table activity_log add
hcm_got_estimate_num char(16) default (NULL);
go
set ANSI_NULLS on;
go
commit;
go'
, 'go');
你需要拆就'去'。我不确定数据是如何表示的,但它通常涉及ASCII字符10和13的组合(回车和换行符)。 –
“当它自己在一条线上”?它的前后不会有空间**吗?它本身不会有长度吗? – bonCodigo