问题描述
X000233756_9981900025_201901_EUR _ /
我首先需要带上第一个_左边的字符 其次,我需要在第一个和第二个_
之间使用字符First _ is CHARINDEX('_',[Line_Item_Text],1) AS Position_1
Second _ is CHARINDEX('_',CHARINDEX('_',1)+1) AS Position_2
那时我期望能够做到
left([Line_Item_Text],1)-1) AS Data_1
Substring([Line_Item_Text],1)+1),1)+1) - CHARINDEX('_',1)+1)) AS Data_2"
哪个应该给我
X000233756
9981900025
但是当我开始从CHARINDEX函数中进行加减时,函数数量不正确会导致错误。
有什么想法我要去哪里吗?
TIA 杰夫
解决方法
实际上,在这里使用基本字符串函数将是一个噩梦。您可能会发现STRING_SPLIT
和一些聪明的逻辑可能会更容易:
SELECT value
FROM STRING_SPLIT('X000233756_9981900025_201901_EUR_','_')
WHERE LEN(value) > 6 AND NOT value LIKE '[A-Z]%';
此答案假设第三和第四部分始终是6位日期和3个字母的货币代码,并且第一个(但不是第二个)部分始终以某个字母开头。
Demo