【问题标题】:split string with character用字符分割字符串
【发布时间】:2015-07-28 18:23:56
【问题描述】:

使用 SQL 2008;我有以下字符串:

EMCo: 1 WorkOrder: 12770      WOItem: 10

我正在尝试获取 WorkOrder #。

当字符串末尾没有 WOItem 时,我可以使用以下语句获取 WorkOrder #。

[WorkOrder] = LTRIM(RTRIM(RIGHT(HQMA.KeyString,CHARINDEX(':',REVERSE(HQMA.KeyString))-1)))

此语句移动并可能有 Co# 的两位数,并且它并不总是有 WOItem #。希望找到在“:”之后会分裂的东西,然后只拿第二组。

有什么建议吗?

【问题讨论】:

    标签: sql string sql-server-2008 split character


    【解决方案1】:

    上面的 patindex 建议可以很好地工作,现在如果您仍想使用当前语句,substring 将提取相同的值,replace 将取出 WOItem。不是很优雅,不管你有没有 WOItem,它都可以工作:

    select substring(LTRIM(RTRIM(RIGHT(REPLACE(HQMA.KeyString,'WOItem:',''),
    CHARINDEX(':',REVERSE(REPLACE(HQMA.KeyString,'WOItem:','')))-1))),0,7)
    
    
    select substring(LTRIM(RTRIM(RIGHT(REPLACE(HQMA.KeyString,'WOItem:',''),
    CHARINDEX(':',REVERSE(REPLACE(HQMA.KeyString,'WOItem:','')))-1))),0,7)
    

    【讨论】:

      【解决方案2】:

      使用patindex()怎么样?假设工单总是有五个字符:

      select substring(HQMA.KeyString,
                       patindex('%WorkOrder: %', HQMA.KeyString) + 11,
                       5) as WorkOrder
      

      【讨论】:

      • 我确实有一些 4 个字符的工单
      • @Kerry 。 . .如果您从结果中删除空格,这也应该适用于那些。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 2020-03-07
      • 2019-11-03
      相关资源
      最近更新 更多