2017-01-18 9 views
0

ベンダーがユーザー定義データをXMLとして1つの列に書き込むため、その列からデータを3番目にプルするSQLクエリ(2008/2012/2014)を記述する必要がありますパーティのアプリケーションは、ここに列左トリム 'abc'と右トリム 'xyz'

<udf><udf_date_ppe>15/12/2019</udf_date_ppe><udf_text_ppn>300965994</udf_text_ppn><udf_date_ved>8/12/2016</udf_date_ved><udf_text_vtno>417 - Working holiday</udf_text_vtno><udf_text_ppi>Taiwan</udf_text_ppi></udf> 

であるものの例だ問題は、私はXMLとXMLは、私は動的に把握する必要があり、同じ順序の意味に格納されていないではない、すべての実際のデータを取得する必要がありあり左と右をトリムする長さ。たとえば、このXMLの間にのみ日付が必要です

<udf_date_ppe>15/12/2019</udf_date_ppe> 

しかし、私はその前にいくつの文字があるのか​​わかりません。いったん私は他のフィールドのために複製することができる方法を考え出すと、これはユーザーが定義した1つだけですが、少なくともXMLは変更されません。私は、サーバーへのアクセス権しか持っていません。

痛みのビット私は知っているが、どんな助けもありがとう。

+1

使用しているRDBMSにタグを付けてください。あなたの質問に基づいて、何らかの手続きでXML構文解析を使用すると、文字列操作コマンドや正規表現を使用するよりも優れているようです。 –

+0

タグは常にになります。常に10になります。 –

+0

文字列関数はベンダー固有のものであるため、実際にどのデータベースを使用しているか教えてください。 –

答えて

1

あなただけ<udf_date_ppe>タグ内に登場する10個の文字を取得したい場合は、SQL Serverの文字列関数と次のクエリを使用することができます。

SELECT SUBSTRING(col, CHARINDEX('<udf_date_ppe>', col) + 14, 10) 
FROM yourTable 

これは、単一の<udf_date_ppe>タグが唯一の存在であることを前提としていカラム。

+0

これは完璧でエレガントです。 –