0
我有一張這樣的桌子。如何在SQL中將一列分割成多行?
id items
1 1|2|3
2 3|4
...
現在,我想分割項目到多行,像這樣。
id item
1 1
1 2
1 3
2 3
2 4
...
SQL可以完成這項工作嗎?
我有一張這樣的桌子。如何在SQL中將一列分割成多行?
id items
1 1|2|3
2 3|4
...
現在,我想分割項目到多行,像這樣。
id item
1 1
1 2
1 3
2 3
2 4
...
SQL可以完成這項工作嗎?
由於索引使用等原因,您不應該以這種格式在數據庫中存儲數據。但是在某些情況下,如果外部應用程序以這種方式傳遞信息,則無法避免。如果您必須以這種方式進行存儲並將其分解並以良好的格式進行存儲,則可以使用以下用戶定義的函數來實現它。
CREATE FUNCTION dbo.udf_split (@String nvarchar(max), @Delimiter nchar(1))
RETURNS @Results Table (Items nvarchar(max))
AS
BEGIN
DECLARE @Index int
DECLARE @Slice nvarchar(max)
SET @Index = 1
IF @String IS NULL RETURN
WHILE @Index != 0
BEGIN
SELECT @Index = CHARINDEX(@Delimiter, @String)
IF @Index != 0
SELECT @Slice = LEFT(@String, @Index - 1)
ELSE
SELECT @Slice = @String
INSERT INTO @Results(Items) VALUES (LTRIM(RTRIM(@Slice)))
SELECT @String = RIGHT(@String, LEN(@String) - @Index)
IF Len(@String) = 0 BREAK
END
RETURN
END
GO
如果@GordonLinoff在這裏,他會告訴你,_best_要做的就是規範化你的數據庫結構,以便項目以關係方式存儲。現在,如果你給我一個'id',我無法知道它與哪個項目相關聯。 –
切勿將數據存儲爲單獨的項目,這隻會導致很多問題。每行一個項目就是SQL方式! – jarlh