【问题标题】:MYSQL Replace Statement using _ (UnderScore) or %MYSQL 使用 _ (UnderScore) 或 % 替换语句
【发布时间】:2021-07-31 21:02:35
【问题描述】:

我需要使用替换查询更新一列,但我不知道 10 个字符,我需要用 _ 填充,就像在 LIKE 语句中一样

UPDATE USERS SET LASTONLINE = REPLACE(LASTONLINE, "User1:__________", "User1:1620647000") WHERE NUMBER = '9988776655'

我正在尝试存储用户上次在线时间的时间戳。由于许多原因,我无法更改表结构,这使问题变得更大。我只想用新的时间戳替换我不知道的旧时间戳。我确信这可以做到,但逻辑有问题。任何帮助表示赞赏

结构

NUMBER | LASTONLINE
9988.. | User1:<timestamp>,User2:<timestamp>

【问题讨论】:

  • 我迷路了。如果lastonline 是一个时间戳,你为什么要将它设置为一个字符串?样本数据和期望的结果可能会有所帮助。
  • 修复你的数据模型!在一个字符串列中存储多个值并不是 SQL 存储数据的方式!

标签: mysql sql string amazon-web-services sql-update


【解决方案1】:

如果要设置时间戳值,请将其设置为时间戳值。例如:

UPDATE USERS
    SET LASTONLINE = NOW()
    WHERE NUMBER = '9988776655';

我不知道您要将其设置为 什么 时间戳值。这只是使用当前时间。

我不知道您为什么要尝试为字符串设置时间戳,但这并没有什么用处。

【讨论】:

  • 因为我在同一列中有多个用户的时间戳。这就是我提到结构应该保持不变的原因
  • 请看一下结构
【解决方案2】:

假设您的 LASTONLINE 字段包含用户数 1、2、3、4 的字符串... 并且从您的示例查询中,您将知道要更新的用户以及要更新的号码,您可以使用 subtring 在用户之前获取字符串的子字符串(在您的示例中为 User1),与所需的字符串连接,并获取User1 位置的子字符串加上 16 个空格,表示“User1:加上 10 个数字”之后的字符串。

  update USERS
        set LASTONLINE = concat(substring_index(LASTONLINE , 'User1:', 1),
                             'User1:1620647000',
                              substr(LASTONLINE,LOCATE('User1:',LASTONLINE)+16))
        where NUMBER = '9988776655';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多