我需要过滤所有大于2011年1月1日的日期。
select * from table_name where date > '01/01/2011';
问题是date
字段存储int
值,这是一个示例:
1339011098
1336717439
1339010538
如何转换sql查询上的date
字段(从int
格式转换为日期格式),我需要将其转换为有效日期,以便我可以将其与上述日期进行比较
感谢名单。
答案 0 :(得分:1)
你的方向错了。您可以尝试转换您只需要执行一次的目标日期,而不是转换可能数百万条记录进行比较。这些看起来像unix时间戳,因此生成的查询应如下所示:
SELECT * FROM `Table_name` WHERE date > unix_timestamp('01/01/2011')
或者,如果您可以控制它,请尝试使用ISO日期格式,这样可以避免与日期(如3/2/13)的欧洲日期格式混淆:
SELECT * FROM `Table_name` WHERE date > unix_timestamp('2011-01-01')
答案 1 :(得分:0)
您可以使用UNIX_TIMESTAMP()
select *
from table_name
where date > unix_timestamp('2011-01-01')
或者反过来使用FROM_UNIXTIME()
select *
from table_name
where FROM_UNIXTIME(date, "%Y-%m-%d") > '2011-01-01'
答案 2 :(得分:0)
首先,您不应将日期值存储为整数,如果它在您的控制之下,您的目标应该是修复数据库以及为该列而不是日期插入整数值的任何查询。
您需要与当前设置一起使用的两个日期函数是UNIX_TIMESTAMP()
,它接受日期值并返回纪元时间戳整数和FROM_UNIXTIME()
,它接受纪元时间戳整数并返回日期值。
对于您的示例,您可以使用:
SELECT * FROM table_name WHERE FROM_UNIXTIME(date_field) > '01/01/2011';
或
SELECT * FROM table_name WHERE date_field > UNIX_TIMESTAMP('01/01/2011');
但我建议使用FROM_UNIXTIME
作为一般规则,因为这会简化更复杂的查询,例如:
SELECT * FROM table_name WHERE
FROM_UNIXTIME(date_field)
BETWEEN '01/01/2013' AND '04/01/2013';
基本上,在您的日期字段实际存储日期类型的值之前,您的查询应使用FROM_UNIXTIME
转换字段值。