MySQL - 如果没有0开始,则将0连接到所有列值

时间:2013-07-10 03:07:42

标签: mysql sql concatenation

我正在使用一个数据库,我们有一个FNN列(完整国家号码)。在澳大利亚,所有FNN都是10位数字,以0开头,后跟单位数状态号码,然后是8位数电话号码。

目前,只有一半的参赛作品只有9位,这意味着排除了前0,但另一半则有10位数。

我想将一个0连接到所有没有0开始的列值。这是我尝试过的当前查询,但结果为0。

UPDATE SUBSCRIBERS SET FNN=concat('0',FNN) WHERE FNN LIKE '[1-9]%';

状态数字不以0开头,所以我只需要连接一个0,其中第一个数字在1-9之间。为什么上述查询不起作用?

感谢。

此致

马特

4 个答案:

答案 0 :(得分:2)

您可以使用not like

UPDATE SUBSCRIBERS SET FNN=concat('0',FNN) WHERE FNN NOT LIKE '0%';

答案 1 :(得分:1)

那不太对。

首先,MySQL不支持LIKE'[1-9]'字符类约定。这是SQL Server的事情。

这样做最简单的方法非常难看,但这听起来像是一次性的交易:

UPDATE Subscribers SET fnn = concat('0', fnn) WHERE fnn LIKE '1%'
UPDATE Subscribers SET fnn = concat('0', fnn) WHERE fnn LIKE '2%'
UPDATE Subscribers SET fnn = concat('0', fnn) WHERE fnn LIKE '3%'
UPDATE Subscribers SET fnn = concat('0', fnn) WHERE fnn LIKE '4%'
    <etc>

答案 2 :(得分:1)

在你的问题中你提到他们中的一些有9位数,而另一半有10位数,所以我建议不要寻找FNN以1-9开头的行,为什么不寻找有FNN = 9的行数字?

UPDATE SUBSCRIBERS
SET FNN=concat('0',FNN)
WHERE CHAR_LENGTH(FNN) = 9;

答案 3 :(得分:0)

这里似乎有很多可行的答案,但您可以完全取消WHERE条款:

UPDATE SUBSCRIBERS
SET FNN = RIGHT(concat('0',FNN),10)