简书链接:sql对某字段以分隔符的进行不足补0转行
文章字数:200,阅读全文大约需要1分钟
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 33 34 35 36 37 38
| -- 声明输入字符串和临时表 DECLARE @inputString NVARCHAR(MAX) = 'AD_1_D1_2_3_6fff3'; DECLARE @tempTable TABLE (PartNumber INT, PaddedPart NVARCHAR(10)); -- 初始化变量 DECLARE @start INT = 1; DECLARE @end INT; DECLARE @part NVARCHAR(MAX); DECLARE @maxLength INT = 4; -- 假设每个部分要补足到4位 DECLARE @partNumber INT = 1; -- 用于跟踪部分编号 -- 使用 WHILE 循环来分割字符串 WHILE CHARINDEX('_', @inputString, @start) > 0 BEGIN SET @end = CHARINDEX('_', @inputString, @start); SET @part = SUBSTRING(@inputString, @start, @end - @start); -- 插入到临时表,并用0补足长度 INSERT INTO @tempTable (PartNumber, PaddedPart) VALUES (@partNumber, RIGHT('0000' + @part, @maxLength)); -- 更新部分编号和起始位置以继续下一次循环 SET @partNumber = @partNumber + 1; SET @start = @end + 1; END -- 处理最后一个部分(没有下划线的部分) IF @start <= LEN(@inputString) BEGIN SET @part = SUBSTRING(@inputString, @start, LEN(@inputString) - @start + 1); -- 插入到临时表,并用0补足长度 INSERT INTO @tempTable (PartNumber, PaddedPart) VALUES (@partNumber, RIGHT('0000' + @part, @maxLength)); END -- 查询临时表以查看结果 SELECT * FROM @tempTable;
|

纯分割转行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| CREATE FUNCTION [dbo].[SplitStringToRow] ( @str NVARCHAR(4000) ,@char NVARCHAR(10) = ',' ) --create by lozn RETURNS @SplitStr TABLE ( ID int IDENTITY PRIMARY KEY ,Value nvarchar(2000) ) AS BEGIN SET @str = @str + @char WHILE LEN(@str) > 0 BEGIN INSERT @SplitStr SELECT SUBSTRING(@str, 1, CHARINDEX(@char, @str) - 1) SELECT @str = RIGHT(@str, LEN(@str) - CHARINDEX(@char, @str) - (LEN(@char) - 1)) END RETURN END
|