0

次に例を示します。

[U_TipTon]=118.7->59.35;[U_Haulge]=428.28->214.14

118.7->59.35 を Tipton として抽出し、別の列で 428.28->214.14 を U_Haulage として抽出する必要があります。

文字列の長さは可変であり、パターン ワードの位置も可変です。

Patindex を試していますが、方法が見つかりません。

4

2 に答える 2

1

MySQL には、区切り文字に基づいて部分文字列を抽出する SUBSTRING_INDEX があります。

select
  substring_index(substring_index(x, '[U_TipTon]=', -1), ';', 1) as TipTon
  ,substring_index(substring_index(x, '[U_Haulge]=', -1), ';', 1) as Haulge
from
 (
   select '[U_TipTon]=118.7->59.35;[U_Haulge]=428.28->214.14' as x
 ) as dt

編集: MS SQL Server では、より複雑です:

select 
   substring(xHaulge, 1, charindex(';', xHaulge + ';')-1) as Haulge,
   substring(xTipTon, 1, charindex(';', xTipTon + ';')-1) as TipTon
from
 (
   select
      case when charindex('[U_Haulge]=', x) > 0 
           then substring(x, charindex('[U_Haulge]=', x) + len('[U_Haulge]='), 8000)
           else '' 
      end as xHaulge,
      case when charindex('[U_TipTon]=', x) > 0 
           then substring(x, charindex('[U_TipTon]=', x) + len('[U_TipTon]='), 8000) 
           else '' 
      end as xTipTon
   from 
    (
      select '[U_TipTon]=118.7->59.35;[U_Haulge]=428.28->214.14' as x
    ) as dt
 ) as dt
于 2015-02-15T18:22:50.793 に答える
0

解決策は次のとおりです。

charindex('Haulge',t.xField) > 0 の場合

substring( t.xField , charindex('Haulge',t.xField) + 8,case when charindex(';',substring( t.xField , charindex('Haulge',t.xField) + 8,LEN(t. xField))) = 0 then LEN(t.xField) else charindex(';',substring( t.xField , charindex('Haulge',t.xField) + 8,LEN(t.xField)))-1 end ) else '-' end [Haul Price] ,case when charindex('Tipton',t.xField) > 0 then

substring( t.xField , charindex('TipTon',t.xField) + 8,case when charindex(';',substring( t.xField , charindex('Tipton',t.xField) + 8,LEN(t. xField))) = 0 then LEN(t.xField) else charindex(';',substring( t.xField , charindex('Tipton',t.xField) + 8,LEN(t.xField)))-1 end ) else '-' end [Tip Price] ,case when charindex('AItmPr',t.xField) > 0 then

substring( t.xField , charindex('AItmPr',t.xField) + 8,case when charindex(';',substring( t.xField , charindex('AItmPr',t.xField) + 8,LEN(t. xField))) = 0 then LEN(t.xField) else charindex(';',substring( t.xField , charindex('AItmPr',t.xField) + 8,LEN(t.xField)))-1 end ) else '-' end 【追加料金】

于 2015-02-17T15:25:52.307 に答える