長い文字列の列があります。データは列に分割する必要があり、可変長の文字列があり、必ずしも同じ量の列ではありません。これを行う方法が正確ではないので、ここでいくつかのアドバイスを探していました。文字列から列にデータを分割する
私はこの文字列を考えてみましょう:
VS5〜MedCond1〜35.4を| VS3〜MedCond6〜64 | VS2〜MedCond4〜70 | | SPO2〜MedCond5〜100 VS4〜MedCond2〜16 | VS1〜MedCond3〜155 | FiO2〜MedCond7〜21 | MAP〜MedCond8〜98 |
場合によっては、その文字列の一部だけがすべての病状を有していない場合もあります。
私は列名がtildsすなわちMedCond1の間にあり、値がtildの右側にあるが、パイプの前の値でこのように終わるでしょう列に分割する必要があり:
MedCond1 MedCond2 MedCond3 MedCond4 MedCond5 MedCond6 MedCond7 MedCond8
======== ======== ======== ======== ======== ======== ======== ========
35.1 24 110 64 100 88 21 79
私は大きなテーブル内の多くの行のためにこれを行う必要があると私は言ったように、すべての列は常に存在していないが、彼らは異なる名前ではない、あなたはmed cond 1-8を持っている可能性があり、 3、4、7。
私が作成したクエリは、私が欲しいものだがダイナミックではないように作成されているので、値の一部を追加して値を取得していますあなたは数値がCHARINDEX数のハードコーディングによる文字列の追加の一部で時々取り上げている見ることができるように、文字列
select MainCol, case when charindex('MedCond1', MainCol) > 0 then
substring(MainCol, charindex('MedCond1', MainCol) + 9, 4) end as [MedCond1]
from MedTable
は
MedCond1
========
35.3
40.2
33.6
33|V <--- Problem
を返します。値は小数点以下4桁、時には小数点以下2桁です。私はこのダイナミックにしたいと思います。パイプは必要なデータの終わりを定義し、開始点は列名の最後のティルドによって定義されます。このダイナミック
アンドリュー
広すぎます。これらの文字列を分割するために使用するツールを指定してください –
SQL Server 2012を使用したいと思っています – Andrew
これを達成するために締め切りを守っている人はいますか?私はSQL文を追加しますが、これは私がやりたいことはしていますが、動的ではないので、文字列のビット数が増えます。 – Andrew