我有一个表格,其中包含使用格式YYYY-MM-DDTHH:MM:SS
获取特定日期的时间我使用这个sql:
SELECT SUBSTRING(DateFrom FROM 12 FOR 5) AS From FROM calendar WHERE SUBSTRING(DateFrom FROM 1 FOR 10) = "'.$date.'"
这给了我:
HH:MM
.$date
(来自datepicker)格式为DD.MM.YYYY
我创建的网站应该让用户看到与日期相关的时间
我可以在检查它是否等于.$date
之前从我的数据库中转换字符串吗?
或者将格式从datepicker更改为YYYY.MM.DD
会更好吗?
答案 0 :(得分:1)
如何摆脱子串的东西并使用它呢?
SELECT TIME(DateFrom) AS `From`
FROM Calendar
WHERE DATE(DateFrom) = STR_TO_DATE($date,'%d.%m.%Y')
这将起作用,因为您的DateFrom字段恰好以DATETIME对象的标准字符串格式存储。
From
是反对的,因为它是一个保留字。
您确实应该考虑将DateFrom列的数据类型更改为DATETIME,然后将该列编入索引。然后,您可以将WHERE子句更改为此
WHERE DateFrom >= STR_TO_DATE($date,'%d.%m.%Y')
AND DateFrom < STR_TO_DATE($date,'%d.%m.%Y') + INTERVAL 1 DAY
您将获得非常好的性能优势。
答案 1 :(得分:1)
这就是我最终解决它的方式:
$date1 = 18.02.2014;
$date2 = 22.02.2014;
$a = explode('.',$date1);
$revdate1 = $a[2].'-'.$a[1].'-'.$a[0];
$newdate1 = str_replace(".","-",$revdate1);
$b = explode('.',$date2);
$revdate2 = $b[2].'-'.$b[1].'-'.$b[0];
$newdate2 = str_replace(".","-",$revdate2);
SELECT SUBSTRING(DateFrom FROM 1 FOR 10) AS Date,
SUBSTRING(DateFrom FROM 12 FOR 5) AS StartTime,
SUBSTRING(DateTo FROM 12 FOR 5) AS EndTime
FROM Calendar WHERE SUBSTRING(DateFrom FROM 1 FOR 10)
BETWEEN "'.$newdate1.'" AND "'.$newdate2.'"
我知道DATETIME会更好,但这不是一个选项(不是我的数据库)。 因此,此解决方案采用格式为dd.mm.yyyy的日期,并将其重新格式化为yyyy-mm-dd并根据我表中的子字符串日期进行检查。
所以查询打印全部: Date,StartTime,EndTime 在两个日期之间