【问题标题】:MySQL length() not giving correct number of charactersMySQL长度()没有给出正确的字符数
【发布时间】:2013-08-27 12:01:54
【问题描述】:

我有一个包含 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 完成所有这些工作。

【问题讨论】:

  • 似乎不会导致您的问题,但 MySQL 中的 LENGTH 以字节为单位给出了字符串的长度。 CHAR_LENGTH 给出字符数。
  • 是的,我实际上都试过了,我应该提到这一点。如果我不得不打赌,问题出在我进行查询的方式上。感谢您的回答!
  • 你能做一个重现问题的小提琴吗?
  • 如果你 SELECT icd10code, LENGTH(RTRIM(icd10code) FROM icd10 WHERE LENGTH(RTRIM(icd10code) <> 7 会发生什么?如果您获得任何记录,则意味着您的列在 dx 代码之后加载了尾随空格。 RTRIM 函数从您的值的右侧去除空白。 LTRIM 函数将它们从您的值的左侧剥离。
  • 你明白了!谢谢谢谢!显然,当您从文本文件上传数据时,所有变量都将在右侧填充空格以等于最长的变量。谢谢!

标签: mysql trim string-length


【解决方案1】:

最后好像有空,试试用 rtrim。

【讨论】:

  • 是的!正如我上面所说,我从文本文件上传数据,由于它是固定宽度,“额外”宽度会自动添加到空格中。非常感谢。对于像我这样的其他菜鸟,这是有效的代码:UPDATE icd10 SET icd10length=LENGTH(trim(icd10code)) WHERE LENGTH(icd10code)>0。我也可以使用这个概念来修剪整个数据库中的额外空间。再次感谢您的帮助!
  • 一切都已修复!我能够从整列中修剪空格并修剪尾随的“。”从代码 - 再次,非常感谢大家的帮助!
猜你喜欢
  • 2015-10-01
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多