0

我有一个有 8 列的表,所有 varchar(24、24、24、5、5、255、255、255)。

三个重要的列是:

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”。

所以两个问题:

  1. 如何将变量 icd10code 或 icd10codedot 的正确长度放入列中?

  2. 您是否有一种巧妙的方法来剪切 4 个字符长的字符串的最后一个字符?

再次非常感谢!

PS - 我在 PHP 中尝试了初始查询,但它崩溃了 - 300 秒后超时。在网上发现,你应该尽可能在 MySQL 中做事。

PSS - 我正在通过 phpMyAdmin 完成所有这些工作。

4

1 回答 1

1

看起来你最后有空白空间,尝试使用 rtrim。

于 2013-08-27T12:34:12.113 回答