0

我目前运行此操作以将空字符串转换为 null。有什么方法可以找出经过 NULLIF() 操作或具有空字符的最后一行,以便我可以从那时起处理所有内容。我的表有一个时间戳列。我有 150 列,例如 recovery_email,我想从在其中任何一个中找到的最后一个空字符串开始。

UPDATE table                                                                                                 
    SET recovery_email = NULLIF(recovery_email, ''), # There are 150 columns like recovery_email.
    email = NULLIF(email, ''),
    WHERE timestamp >= (NOW() - INTERVAL 1 DAY)   
4

2 回答 2

0

这回答了问题的原始版本。

你为什么要使用NULLIF()?只需过滤到您想要的行:

UPDATE table                                                                                                 
    SET recovery_email = NULL                                
    WHERE timestamp >= (NOW() - INTERVAL 1 DAY) AND recovery_email = '';

您可以放置​​索引,recovery_email而不必担心尝试按时间过滤。

或者,更好的是,使用约束定义列check(在最新版本的 MySQL 中),因此不允许使用空字符串。

于 2020-05-03T21:30:01.730 回答
0

如果在执行查询之前没有任何一个,您recovery_email可以在语句之后运行以下查询 以获取最后更新的行:nullupdateupdatetimestamp

select max(timestamp) last_timestamp 
from mytable 
where recovery_email is null and timestamp >= now() - interval 1 day

否则,您需要使用以下查询计算之前的最新值:update

select max(timestamp) last_timestamp 
from mytable 
where recovery_email = '' and timestamp >= now() - interval 1 day
于 2020-05-03T21:30:07.930 回答