从TimeDate列中选择/查看数据

时间:2016-03-17 17:10:08

标签: php mysql

我想在我的表格中显示或选择'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

感谢

1 个答案:

答案 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列,数据库可以使用索引快速执行范围搜索,例如DATETIMEAbsense_Time BETWEEN '2016-03-01' AND '2016-03-31'。它避免了必须查看和比较每一行,这将大大提高查询性能随着表大小的增长。但是,如果您必须先将Absense_Time > '2016-03-01'列转换为VARCHAR,则无法使用该索引。它必须对表中的每一行进行转换和比较。