我想在我的表格中显示或选择'log_timestamp'列日期是(2016年3月9日或2016年3月20日)>格式mm / dd / yyyy。你可以问一下我需要什么吗?
UserID UserName Status Absense_Time(sic)
1 bray Present 3/9/2016 13:46 (Format m/dd/yyyy) I
1 bray absense 3/14/2016 13:46
1 bray permit 3/20/2016 13:46
2 john permit 3/9/2016 13:46
2 john Present 3/14/2016 13:46
2 john absense 3/20/2016 13:46
2 greg absense 3/9/2016 13:46
2 greg permit 3/14/2016 13:46
2 greg present 3/20/2016 13:46
4 dylan present 3/9/2016 13:46
4 dylan present 3/14/2016 13:46
4 dylan permit 3/20/2016 13:46
5 rick present 3/9/2016 13:46
5 rick permit 3/14/2016 13:46
5 rick present 3/20/2016 13:46
感谢
答案 0 :(得分:0)
我不完全确定您的要求,但我认为如何使用I18N.__('hello')
列作为日期。由于它是Absense_Time
,您必须使用STR_TO_DATE()将其转换为VARCHAR
类型。格式化选项记录为DATE_FORMAT()的一部分。
DATETIME
现在它已转换为DATETIME
,您可以对其进行日期数学运算并使用所有date functions。请注意,您需要在MySQL理解的ISO 8601 format中提供您想要比较的日期,否则他们还需要使用STR_TO_DATE(Absense_Time, '%c/%e/%Y %T')
转换。
STR_TO_DATE()
对于将来,您应该考虑将-- Find all users who were absent after March 1st, 2016.
SELECT *
FROM users
WHERE DATE(STR_TO_DATE(Absense_Time, '%c/%e/%Y %T')) > '2016-03-01'
转换为正确的Absense_Time
列。这使得查询更容易,它避免了格式化错误,并且通过允许数据库使用索引,它可以使更快。
使用索引DATETIME
列,数据库可以使用索引快速执行范围搜索,例如DATETIME
或Absense_Time BETWEEN '2016-03-01' AND '2016-03-31'
。它避免了必须查看和比较每一行,这将大大提高查询性能随着表大小的增长。但是,如果您必须先将Absense_Time > '2016-03-01'
列转换为VARCHAR
,则无法使用该索引。它必须对表中的每一行进行转换和比较。