选择子字符串(日期)并进行转换

时间:2014-04-24 11:54:15

标签: php mysql sql date

我有一个表格,其中包含使用格式YYYY-MM-DDTHH:MM:SS

的DateFrom(Varchar)列

获取特定日期的时间我使用这个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会更好吗?

2 个答案:

答案 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 在两个日期之间