1

我正在使用一个数据库,其中我们有一个 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

4 回答 4

2

可能你可以使用not like

UPDATE SUBSCRIBERS SET FNN=concat('0',FNN) WHERE FNN NOT LIKE '0%';
于 2013-07-10T03:19:22.867 回答
1

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

UPDATE SUBSCRIBERS
SET FNN=concat('0',FNN)
WHERE CHAR_LENGTH(FNN) = 9;
于 2013-07-10T03:19:45.043 回答
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>
于 2013-07-10T03:12:57.733 回答
0

这里似乎有很多可行的答案,但您可以通过以下方式WHERE完全消除该子句:

UPDATE SUBSCRIBERS
SET FNN = RIGHT(concat('0',FNN),10)
于 2013-07-10T04:05:25.297 回答