すべて varchar (24、24、24、5、5、255、255、255) の 8 列のテーブルがあります。
重要な 3 つの列は次のとおりです。
icd10code (varchar 24)
icd10codedot (varchar 24)
icd10length (varchar 5)
「ABCDEF」のような列を「ABC.DEF」に変換したいと思います。
使用した MySQL クエリは次のとおりです。完全に機能しました。
UPDATE icd10
SET icd10codedot =
CONCAT ( LEFT(icd10code, 3) ,
"." ,
RIGHT( icd10code, ( LENGTH(icd10code)-3 )
)
);
91,000 行すべてがうまくいきましたが、末尾に「.」がありました。3 文字しかないエントリの最後に - 「ABC.」のように。最後にそのドットは必要ありません。
だから私はこれを試しました:
UPDATE icd10 SET icd10codedot = LEFT(icd10codedot, 3) WHERE LENGTH(icd10codedot)=4;
この:
UPDATE icd10 SET icd10codedot = LEFT(icd10code, 3) WHERE LENGTH(icd10code)=3;
この:
UPDATE icd10 SET icd10codedot = LEFT(icd10code, 3) WHERE LENGTH(icd10code)=3;
それらのどれも機能しませんでした (他の組み合わせも多数実行されましたが、どれも機能しませんでした)。
コード内での動作を確認するために、"icd10length" varchar int という列を作成し、次のクエリを実行しました。
UPDATE icd10 SET icd10length = LENGTH(icd10code);
列の右側に 91,000 個の "7" が並んでいました。
列を INT から VARCHAR 5 に変更し、クエリを再実行したところ、列の右側に 91000 個の "7" が並んでいました ( :-) )。
2つの質問:
変数 icd10code または icd10codeot の正しい長さを列に入れるにはどうすればよいですか?
4 文字の長さの文字列の最後の文字を切り取る巧妙な方法はありますか?
どうもありがとうございました!
PS - PHP で最初のクエリを試したところ、クラッシュしました - 300 秒後にタイムアウトしました。Web で、可能な限り常に MySQL で実行する必要があることがわかりました。
PSS - 私は phpMyAdmin を介してこれらすべてを行っています。