我的MySQL查询有问题。
我想从我的表中查询最早7天的删除行。此表在不同的行中包含day
,month
和year
。
这是我的疑问:
DELETE FROM
`logowanie_dj`
WHERE
`miesiac`
IN (
SELECT CONCAT(dzien,':', miesiac,':', rok) < 21:1:2014'
)
但是mysql_query()
正在删除所有行。
答案 0 :(得分:1)
我认为你的意思是年,月和日是不同的列?
然后这可能有效:
DELETE FROM `logowanie_dj` WHERE CAST(CONCAT(dzien,':',miesiac,':',rok) AS DATE) < CAST('21:1:2014' AS DATE)
它会从行的单元格中以dd:mm:yyyy
格式创建日期值,如果它在21:1:2014
之前,则将其删除。
请注意,您显然使用的是非英语的日期格式。 MySQL可能有问题,所以你可能需要这样做:
DELETE FROM `logowanie_dj` WHERE CAST(CONCAT(rok,'-',miesiac,'-',dzien) AS DATE) < CAST('2014-01-21' AS DATE)
答案 1 :(得分:1)
检查日期和时间格式是否正确。试试这种格式&#39; yyyy:mm:dd hh:mm:ss&#39;
答案 2 :(得分:0)
您可能希望尝试将两个字符串转换为日期,以便它知道将比较作为日期。
“为了在将BETWEEN与日期或时间值一起使用时获得最佳结果,请使用CAST()将值显式转换为所需的数据类型。示例:如果将DATETIME与两个DATE值进行比较,请将DATE值转换为DATETIME值。如果在与DATE的比较中使用字符串常量(如“2001-1-1”),则将字符串强制转换为DATE。“
答案 3 :(得分:0)
*在尝试此<* strong>
之前备份您的数据库DELETE FROM `logowanie_dj`
WHERE ABS(UNIX_TIMESTAMP()-UNIX_TIMESTAMP(CONCAT(rok,'-',miesiac,'-',dzien))) > 604800
答案 4 :(得分:-1)
尝试使用以下代码
DELETE FROM
`logowanie_dj`
WHERE
`miesiac`
IN (
SELECT CONCAT(dzien,':', miesiac,':', rok) < '2014:01:21 00:00:00'
)