【问题标题】:MySQL update query to prepend digit to existing column with integers valuesMySQL更新查询以将数字添加到具有整数值的现有列
【发布时间】:2014-03-16 20:03:43
【问题描述】:

我有一个名为 telephoneNo 的 mysql 数据库列

Telephone No 
25645656
45454545
45565656

我想在telephoneNo 列的每个值前面加上两位数 XX

Telephone No 
xx25645656
xx45454545
xx45565656

我试图用 concat 锻炼,但在我的情况下它不是整数值,请帮助更新查询

【问题讨论】:

  • 为什么是这些整数?您打算从另一个电话号码中减去一个电话号码吗?
  • 不,我只想在一个列中的所有数字前面插入 92。这是我的要求
  • 电话号码是字符串。将它们存储为字符串。

标签: mysql sql concat


【解决方案1】:

您可以使用CAST() 显式转换您的整数:

UPDATE t SET phone=CAST(CONCAT('10', phone) AS UNSIGNED)

这将适用于整数前缀。但是,我认为没有充分的理由将电话号码存储为整数而不是字符串

【讨论】:

    【解决方案2】:

    这是一个 hack,将你的 col 更改为 varchar 或其他东西。

    UPDATE table SET telephoneNo=9200000000+telephoneNo;
    

    编辑

    这种方法要求你所有的数字长度相同,并且长度为8位,如果你的所有数字都多于或少于8位,则相应地修改92之后的0的数量

    【讨论】:

    • 虽然这看起来不错(从运营成本的角度来看) - 它要求所有数字的长度相同(并且长度应该在 UPDATE 之前知道) - 所以我认为应该提到这一点
    • 我想他知道所有的长度,并且它们都与列是 int 相同,并且他想在所有长度上加 92,因此它们都在同一个国家或地区
    • 好吧,即使在同一个国家,也可能有不同的编号长度(如果我们谈论的是电话号码)
    【解决方案3】:

    如果您的 telephone 列是 int,您可以使用 concat 字符串函数与 intstring 连接,如下所示

    SELECT CONCAT(xx, telephone);
    

    (或)

    SELECT CONCAT('xx', telephone);
    

    (或)

    显式转换您的 int 列值

    SELECT CONCAT('xx', CAST(telephone AS CHAR));
    

    【讨论】:

    • 在普通情况下你不能依赖隐式转换(因为严格模式可能会禁止)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 2011-09-19
    • 1970-01-01
    • 2022-12-13
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多