【问题标题】:Extracting Portions of String提取部分字符串
【发布时间】:2021-02-21 09:52:59
【问题描述】:

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

X000233756_9981900025_201901_EUR_/

我首先需要取第一个_左边的字符 其次,我需要取第一个和第二个之间的字符 _

First _ is CHARINDEX('_',[Line_Item_Text],1) AS Position_1
Second _ is CHARINDEX('_',[Line_Item_Text],CHARINDEX('_',[Line_Item_Text],1)+1) AS Position_2

我当时期望能够做到

left([Line_Item_Text],CHARINDEX('_',[Line_Item_Text],1)-1) AS Data_1
Substring([Line_Item_Text],CHARINDEX('_',[Line_Item_Text],1)+1),CHARINDEX('_',[Line_Item_Text],CHARINDEX('_',[Line_Item_Text],1)+1) - CHARINDEX('_',[Line_Item_Text],1)+1)) AS Data_2"

哪个应该给我

X000233756

9981900025

但是当我开始对 CHARINDEX 函数进行加减运算时,会出现函数数量不正确的错误。

任何想法我哪里出错了?

TIA 杰夫

【问题讨论】:

    标签: substring charindex


    【解决方案1】:

    实际上,在这里使用基本字符串函数将是一场丑陋的噩梦。您可能会发现 STRING_SPLIT 以及一些巧妙的逻辑可能更容易:

    SELECT value
    FROM STRING_SPLIT('X000233756_9981900025_201901_EUR_', '_')
    WHERE LEN(value) > 6 AND NOT value LIKE '[A-Z]%';
    

    此答案假定第三和第四部分始终是 6 位日期和 3 个字母的货币代码,并且第一个(但不是第二个)部分始终以某个字母开头。

    Demo

    【讨论】:

      猜你喜欢
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多