我尝试做类似的事情:
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。
在重复键的条件下,这类问题有很多答案,但我想将日期作为一个条件,它不能成为一个关键。
任何人都可以提供优雅的答案吗?
谢谢 大卫
答案 0 :(得分:0)
您展示的是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;
答案 1 :(得分:0)
一个简单的答案是使用从日期创建的整数作为唯一键。然后你可以使用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上传气象站读数 - Meteobridge是一个将天气连接到互联网的硬件/软件设备。变量以设备软件理解的方式表示。 MySQL每天创建一行累积读数 - 当然可以扩展到更多列。该代码将成为月度和年度记录表的基础,Meteobridge为此提供了有助于提供包含总数的变量。
以上内容对于任何基于日期的记录如果存在需要更新或者如果不存在则需要更新的应用程序应该是有用的。