我有一个包含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”(:-))。
所以有两个问题:
如何将变量icd10code或icd10codedot的正确长度放入列中?
您是否有一种灵巧的方式来剪裁长度为4个字符的字符串的最后一个字符?
非常感谢!
PS - 我在PHP中尝试了初始查询并且崩溃了 - 在300秒后超时。在网上发现,你应该尽可能在MySQL中做事。
PSS - 我正在通过phpMyAdmin完成所有这些。
答案 0 :(得分:1)
最后你似乎有空的空间,尝试使用rtrim。