2016-03-24 8 views
2

助けを借りています。私はこれについてどうやって行くのか分かりません。異なるフォーマットの数字を含む文字列に参加してください

2つのテーブルがあり、ICD10Code列から他のICD10Code列にデータを取得する必要がありますが、ICD9Codeに参加する必要がある列には、数字が文字列として格納され、末尾の0と10進数が含まれます。

第1のテーブルには、ReportingMeasure、ICD9Code、およびICD10Codeの列があります。 ICD10Codeはnullです。 2番目のテーブルからICD10Codeに値を設定する必要があります。

第2テーブルには、列ICD9CodeとICD10Codeがあります。今問題です。どちらの列もvarchar(25)ですが、表1には末尾のゼロがありません。また、時には整数に末尾の小数点があり、時にはそうではありません。表2には末尾のゼロがあり、整数には10進数と末尾のゼロがあります。

TableST  TablePR 
ICD9Code  ICD9Code 
296.2   296.20 
311. OR 311 311.0 

このコードは、一致がある場合は正しく表示されますが、例は表示されません。

UPDATE TableST 
SET ICD10Code = t2.ICD10Code 
FROM TableST t1 
INNER JOIN TablePR t2 ON t1.ICD9Code = t2.ICD9Code 
GO 

ICD10Codeを不規則なICD9Codeの行で更新するにはどうすればよいですか?コードを仮定

+0

あなたはICD-9のDXコードの非常に大きな数はICD-10に直接マッピングしていないことを知っていますか?そのため、AMAはGEMデータを公開し、ICD-10に直接関係しない多くの(多くの、多くの)ICD-9コードの手動変換を支援します。 –

答えて

1

は常に数字です、あなたは小数点バージョンに参加してみてください:

on cast(t1.ICD9Code as decimal(10, 3)) = cast(t2.ICD9Code as decimal(10, 3)) 

「3」は、小数点以下の桁の最大数の任意の値である(それはで合理的と思われますこの場合)。小数への変換は正確です。あなたは浮動小数点表現を使用したくないでしょう。あなたのケースでうまくいくかもしれない

別の解決策は、likeを使用することです:

on t1.ICD9Code = t2.ICD9Code or 
    ((t1.ICD9Code like '%.%' and t1.ICD9Code = t2.ICD9Code + '0') or 
    (t1.ICD9Code not like '%.%' and t1.ICD9Code = t2.ICD9Code + '.0') 
    ) 
+0

少し助けてくれましたが、それほど助けませんでした。例えば、一方のシステムはコード305を有し、他方のシステムは305.00を有する。彼らは数値的には同等ですが、あなたが推薦したロジックであっても参加しません。それがなぜなのかわからない。 10進数で動作するように私は高い希望を持っていました。 –

+0

結局、あなたのソリューションは正常に機能しました。 305のような数字がステージングテーブルに追加されていないことが分かります。一度私はそれがすべて一緒に来たことを発見した。ありがとう。 –

関連する問題