我有一个表,其列DateFrom(Varchar)使用格式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更好吗?

最佳答案

把子串的东西去掉,改用这个怎么样?

 SELECT TIME(DateFrom) AS `From`
   FROM Calendar
  WHERE DATE(DateFrom) = STR_TO_DATE($date,'%d.%m.%Y')

这将起作用,因为DateFrom字段恰好存储在DATETIME对象的标准字符串格式中。
From是反勾号,因为它是保留字。
您确实应该考虑将DATE的数据类型从列更改为DATE时间,然后对该列进行索引。那么你可以把WHERE子句改成
  WHERE DateFrom >= STR_TO_DATE($date,'%d.%m.%Y')
    AND DateFrom <  STR_TO_DATE($date,'%d.%m.%Y') + INTERVAL 1 DAY

你将获得非常好的性能优势。

关于php - 选择一个子字符串(日期)并将其转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23268160/

10-12 23:50