Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL length()未提供正确的字符数_Mysql_Trim_String Length - Fatal编程技术网

MySQL length()未提供正确的字符数

MySQL length()未提供正确的字符数,mysql,trim,string-length,Mysql,Trim,String Length,我有一个表,有8列,全部是varchar(24,24,24,5,5,255,255) 三个重要栏目是: icd10code (varchar 24) icd10codedot (varchar 24) icd10length (varchar 5) 我希望将一个类似于“ABCDEF”的列转换为“ABC.DEF” 下面是使用的MySQL查询,它工作得非常好 UPDATE icd10 SET icd10codedot = CONCAT ( LEFT(icd10code,

我有一个表,有8列,全部是varchar(24,24,24,5,5,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 )
                    )
        );
所有91000行的结果都很好,只是在条目末尾有一个尾随“.”,只有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;
这是:

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);
我得到的只有91000“7”排在柱子右边

我将该列从INT更改为VARCHAR 5,然后重新运行查询,在该列的右侧(:-)排列了91000个“7”

所以有两个问题:

  • 如何将变量icd10code或icd10codedot的正确长度输入到列中

  • 您是否有一种巧妙的方法来剪裁长度为4个字符的字符串的最后一个字符

  • 再次非常感谢

    PS-我用PHP尝试了初始查询,结果它崩溃了-300秒后超时。在web上发现,只要有可能,您应该始终使用MySQL进行操作


    PSS-我通过phpMyAdmin完成所有这些操作。

    最后似乎有空的空间,请尝试使用rtrim。

    似乎不是问题的根源,但MySQL中的
    LENGTH
    以字节为单位给出了字符串的长度
    CHAR_LENGTH
    给出了字符数。是的,我两个都试过了,我应该提到这一点。如果我不得不打赌问题在于我做查询的方式。谢谢你的回答!你能做一把小提琴来重现这个问题吗?如果你从icd10中选择icd10code,LENGTH(RTRIM(icd10code))怎么办7?如果您得到任何记录,这意味着您的列在dx代码后加载了尾随空格。
    RTRIM
    函数从值的右侧删除空格。
    LTRIM
    函数从值的左侧删除空格。明白了!谢谢,谢谢!显然,当您从文本文件上载数据时,所有f变量将在右边填充空格,以等于最长的变量。谢谢!是的!正如我前面所说,我从一个文本文件上传了数据,因为它的宽度是固定的,所以“额外”的宽度会自动添加到空格中。非常感谢。对于像我这样的其他noob,下面的代码是有效的:更新icd10设置icd10length=LENGTH(修剪)(icd10code)),其中长度(icd10code)>0。我还可以使用此概念来修剪整个数据库中的多余空格。再次感谢您的帮助!一切都已修复!我可以从整个列中修剪空格,并从代码中修剪尾随的“.”再次感谢大家的帮助!