我就是想更新sql表里的一个字段,这个字段里的内容有5位的,也有6位的,我想将长度大于5位的都将第一位字符去掉,也就是将6位的全部变为5位,怎么写这条sql语句呢?我写成如下两个样子,但是都不行,怎么也执行不了,没效果,而且耗时感觉挺长,其实就2000来条数据,为什么呢?
UPDATE wsgd SET wsgd_ajh = SUBSTRING(wsgd_ajh, 2, 6) WHERE (len(wsgd_ajh) > 5)UPDATE wsgd SET wsgd_ajh = SUBSTRING(wsgd_ajh, 2, 6) WHERE (len(wsgd_ajh) = 6)

解决方案 »

  1.   


    UPDATE wsgd SET wsgd_ajh = left(wsgd_ajh, 5) WHERE len(wsgd_ajh) = 6
      

  2.   


    UPDATE wsgd SET wsgd_ajh = SUBSTR(wsgd_ajh, 2) WHERE len(wsgd_ajh) =6
      

  3.   

    这个字段里的内容有5位的,也有6位的,只有这俩种的话就可以省略判断语句了。
    UPDATE wsgd SET wsgd_ajh = Left(wsgd_ajh, 5)
      

  4.   

    我终于知道什么问题了,写成如下方式就可以了
    UPDATE wsgd SET wsgd_ajh = SUBSTRING(wsgd_ajh, 2, 5) WHERE (len(wsgd_ajh) > 5)UPDATE wsgd SET wsgd_ajh = SUBSTRING(wsgd_ajh, 2, 5) WHERE (len(wsgd_ajh) = 6)substring 最后一个参数代表截取长度,我写成6,实际从第二个字符开始是没有6个字符的,不过难道这样也有问题??
    是 pt1314917 的那个sql提醒了我,虽然他的语句写的不对,
    UPDATE wsgd SET wsgd_ajh = left(wsgd_ajh, 5) WHERE len(wsgd_ajh) = 6
    我是要右边的5个字符,您给写成左边了,不过还是把分给您吧,多谢~~~,其他的也感谢捧场,谢谢~还是不明白一点就是为什么 多写一位的话,sql为什么执行那么长时间,而且最终报错,好像是把整个表循环了好几遍,我上面说的2000来条是符合条件的数据条数 ,整个数据表几十万条数据呢