Query to split String value into multiple rows
我有
1 2 3 4 | id | dvr 1 | 1,2,3 2 | 1,3,4 3 | 1,5,6,7,8 |
,并希望拥有
1 2 3 4 5 6 7 8 | id | dvr 1 | 1 1 | 2 1 | 3 2 | 1 2 | 3 2 | 4 ... AND so ON |
我应该使用最快的查询是什么?
进行如下所示的sql函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | CREATE FUNCTION [dbo].[fun_CSVToTable] ( @LIST VARCHAR(7000), @Delimeter VARCHAR(10) ) RETURNS @RET1 TABLE (RESULT BIGINT) AS BEGIN DECLARE @RET TABLE(RESULT BIGINT) IF LTRIM(RTRIM(@LIST))='' RETURN DECLARE @START BIGINT DECLARE @LASTSTART BIGINT SET @LASTSTART=0 SET @START=CHARINDEX(@Delimeter,@LIST,0) IF @START=0 INSERT INTO @RET VALUES(SUBSTRING(@LIST,0,LEN(@LIST)+1)) WHILE(@START >0) BEGIN INSERT INTO @RET VALUES(SUBSTRING(@LIST,@LASTSTART,@START-@LASTSTART)) SET @LASTSTART=@START+1 SET @START=CHARINDEX(@Delimeter,@LIST,@START+1) IF(@START=0) INSERT INTO @RET VALUES(SUBSTRING(@LIST,@LASTSTART,LEN(@LIST)+1)) END INSERT INTO @RET1 SELECT * FROM @RET RETURN END |
如果您正在运行postgresql并且dvr列是文本,则可以执行以下操作:
1 2 3 4 | SELECT id, unnest(string_to_array(dvr,',')) FROM your_table; |