1
我想提出一個分割功能爲選擇像如何把分割功能爲查詢選擇SQL
CREATE TABLE #tmp(id INT ,codes VARCHAR(10))
INSERT INTO #tmp(id,codes) VALUES (1,'1;2;3')
SELECT id , BaseSplit(codes,';') FROM #tmp
但如何???
我想提出一個分割功能爲選擇像如何把分割功能爲查詢選擇SQL
CREATE TABLE #tmp(id INT ,codes VARCHAR(10))
INSERT INTO #tmp(id,codes) VALUES (1,'1;2;3')
SELECT id , BaseSplit(codes,';') FROM #tmp
但如何???
您需要使用CROSS APPLY
是這樣的....
SELECT * FROM #tmp
CROSS APPLY dbo.BaseSplit(#tmp.codes, ';') AS htvf
我不相信你提出的查詢將工作,因爲你試圖返回設置爲選擇的部分記錄。這會拋出一個子查詢返回多個值。當子查詢遵循=,!=,<,< =,>,> =或當子查詢用作表達式時,這是不允許的。如果您想將該值作爲表格拆分,可以使用UDF。
下面是最初發布由戴維·塔克here早在2005年
CREATE FUNCTION dbo.Split(@String NVARCHAR(MAX), @Delimiter NVARCHAR(MAX))
RETURNS @Results TABLE (Items NVARCHAR(MAX))
AS
BEGIN
DECLARE @index INT
DECLARE @slice NVARCHAR(MAX)
SELECT @index = 1
IF @String IS NULL RETURN
WHILE @index != 0
BEGIN
SELECT @index = CHARINDEX(@Delimiter,@String)
IF @index !=0
SELECT @slice = LEFT(@String,@index - LEN(@Delimiter))
ELSE
SELECT @slice = @String
INSERT INTO @Results(Items) VALUES(@slice)
SELECT @String = RIGHT(@String,LEN(@String) - @index)
IF LEN(@String) = 0 BREAK
END RETURN
END
使用量稍微修改UDF:
SELECT * FROM dbo.Split('1;2;3', ';')
什麼是您的分裂函數返回???一張桌子 ??? –
這將有助於查看預期結果,而不是猜測BaseSplit執行的操作。 – booyaa