提取部分字符串

问题描述

我有一个包含以下类型字符串的字段

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