首页 > 解决方案 > 使用 SQL 通过分隔符拆分字符串

问题描述

我在 DB 中的表有一列以以下格式存储值。

1234#2345#6780

使用分隔符“#”存储四位数字。由于数据损坏,有些记录带有五位数字。在给定的行中可能有一个或多个五位数字。

1234#12345#67895

我正在尝试编写一个脚本来仅获取那些损坏的记录但找不到拆分和检查值的方法。

任何帮助表示赞赏。

我使用的是 SQL Server 12.0 版本

标签: sqlsql-serversql-server-2012

解决方案


您可以使用此函数来拆分值:

CREATE FUNCTION [dbo].[fnSplit] 

(@sInputList VARCHAR(8000) -- List of delimited items
  , @sDelimiter VARCHAR(8000) = '#' -- delimiter that separates items
) 

RETURNS @List TABLE (item VARCHAR(8000))

BEGIN

DECLARE @sItem VARCHAR(8000)

WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0

 BEGIN

 SELECT
  @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),

 @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))

 IF LEN(@sItem) > 0
  INSERT INTO @List SELECT @sItem as item
 END

IF LEN(@sInputList) > 0
 INSERT INTO @List SELECT @sInputList as item -- Put the last item in
RETURN
END

然后询问结果


推荐阅读