我正在使用一个数据库,我们有一个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之间。为什么上述查询不起作用?
感谢。
此致
马特
答案 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)