Sql 创建一个select语句,使用Char Index或类似的方法将一列转换为多列

Sql 创建一个select语句,使用Char Index或类似的方法将一列转换为多列,sql,sql-server,Sql,Sql Server,1) 问题1:在每6位之后拆分,基本上我需要在每5位之后拆分我的列,以便123456创建到列,一个是12345,一个是6,我尝试使用下面的代码,但没有结果。没有空格或符号,只有数字 子字符串(COA.UserCode2,5,charindex('',COA.UserCode2))作为帐户, 子字符串(COA.UserCode2,6,charindex('',COA.UserCode2))作为项目 2) 问题2:在每个*后拆分,我可以让下面的第一个工作(基金),但我的成本中心和来源基本上不工作如果

1) 问题1:在每6位之后拆分,基本上我需要在每5位之后拆分我的列,以便123456创建到列,一个是12345,一个是6,我尝试使用下面的代码,但没有结果。没有空格或符号,只有数字

子字符串(COA.UserCode2,5,charindex('',COA.UserCode2))作为帐户,
子字符串(COA.UserCode2,6,charindex('',COA.UserCode2))作为项目

2) 问题2:在每个*后拆分,我可以让下面的第一个工作(基金),但我的成本中心和来源基本上不工作如果我有一个类似1234*34*500的字符串,我需要基金的列有1234(我已经得到了这个),我的成本中心是34,我的来源是500

子字符串(COA.UserCode3,1,charindex('*',COA.UserCode3))作为基金,

子字符串(COA.UserCode3,3,charindex('*',COA.UserCode3)+1)作为成本中心,


子字符串(COA.UserCode3,1,charindex('*',COA.UserCode3))作为源

不知道您使用的是什么DBMS(如果它有特定的SQL扩展等等)或数据的外观,这里至少有一些建议:

1) 如果数据大小固定(始终为6个字符长),则可以执行以下操作:

SUBSTRING(UserCode2,1,5) as Account, SUBSTRING(UserCode2,6,1) as Project
2) 对于第二个问题,您可以执行以下任一操作:

如果数据是固定的:

SUBSTRING(UserCode3,1,4) as Fund, 
SUBSTRING(UserCode3,6,2) as CostCenter, 
SUBSTRING(UserCode3,9,2) as Source 
或者,如果数据是可变的,您必须在*字符上拆分:

SUBSTRING(UserCode3,1,CHARINDEX('*',UserCode3,1)-1) as Fund,
SUBSTRING(UserCode3,CHARINDEX('*',UserCode3,1)+1,CHARINDEX('*',UserCode3,CHARINDEX('*',UserCode3,1)+1) - CHARINDEX('*',UserCode3,1)-1) as CostCenter,
RIGHT(UserCode3,3) as Source

执行如此多的CHARINDEX和SUBSTRING函数可能会对性能造成不利影响,但如果不了解更多数据,则很难提出明智的建议。

您使用的是哪种DMB?神谕PostgreSQL?我正在使用Microsoft sql。长度不一定是6,有时可能是2,有时是15,我想知道是否有一种方法可以在第5个数字之后,不管它是多少个手动数字,都将其分开。JPW,非常感谢您的帮助。我正在创建一个SSRS报告,一次不会有超过几百条记录。对于第2个字符,你已经很好地解决了它,它就像一个符咒,它的长度并不总是相同的,但我总是要在*处打断。如果你总是想在第5个字符后打断数据,并返回两个字符串(前5个字符长,第二个不管剩下什么),你可以使用这个:SUBSTRING(UserCode2,1,5)作为帐户,SUBSTRING(UserCode2,6,LEN(UserCode2))作为项目