MySQL 根据日期有条件地插入或更新

MySQL conditional insert or update based on date

我正在尝试做类似的事情:

IF EXISTS(SELECT * FROM weatherbyday WHERE DATE(DateTime) = CURDATE()) 
THEN update weatherbyday 
SET  
TempMin='[th0temp-dmin]', 
TempMax='[th0temp-dmax]'
WHERE DATE(DateTime) = CURDATE()
ELSE INSERT INTO weatherbyday (DateTime, TempMin, TempMax ) VALUES ('[YYYY]-[MM]-[DD] [hh]:[mm]:[ss]', '[th0temp-dmin]','[th0temp-dmax]' )

但是在这个语法中不能使用 IF。

对于这种以重复键为条件的问题,有很多答案,但我想使用日期作为条件,不能作为键。

谁能提供一个优雅的答案?

谢谢 大卫

您所展示的是 MSSQL 中的语法。这是 MySQL:

IF ((SELECT COUNT(*) FROM weatherbyday WHERE DATE(DateTime) = CURDATE()) > 0) THEN
BEGIN
    UPDATE weatherbyday 
    SET     TempMin = '[th0temp-dmin]', 
            TempMax = '[th0temp-dmax]'
    WHERE   DATE(DateTime) = CURDATE();
END;
ELSE
BEGIN
    INSERT INTO weatherbyday (DateTime, TempMin, TempMax) 
    VALUES ('[YYYY]-[MM]-[DD] [hh]:[mm]:[ss]', '[th0temp-dmin]', '[th0temp-dmax]')
END;
END IF;

一个简单的答案是使用从日期创建的整数作为唯一键。那么你可以使用ON DUPLICATE KEY。这很适合我的目的。

INSERT INTO weatherbyday (wdID, DateTime, TempMin, TempMax,RainDay) 
    VALUES ('[YYYY][MM][DD]', '[YYYY]-[MM]-[DD] [hh]:[mm]:[ss]', '[th0temp-dmin]', '[th0temp-dmax]','[rain0total-daysum]')
  ON DUPLICATE KEY UPDATE TempMin = '[th0temp-dmin]', TempMax = '[th0temp-dmax]',RainDay='[rain0total-daysum]'

我正在使用上面的代码使用 Meteobridge 上传气象站读数 - 一种将气象站连接到互联网的 hardware/software 设备。变量以设备软件理解的方式表达。 MySQL 每天创建一行累积读数 - 当然可以扩展到更多列。该代码将成为月度和年度记录表格的基础,Meteobridge 有助于提供包含总计的变量。

上面的示例对于基于日期的记录如果存在则需要更新或如果不存在则需要创建的任何应用程序都应该是有用的。