2014-04-24 39 views
0

我有一个使用格式YYYY-MM-DDTHH:MM:SS选择串(日期),并将其转换

得到时间的具体日期我用这个SQL列DateFrom(VARCHAR)的表:

SELECT SUBSTRING(DateFrom FROM 12 FOR 5) AS From FROM calendar WHERE SUBSTRING(DateFrom FROM 1 FOR 10) = "'.$date.'" 

这给了我:

HH:MM 

.$date 

(从日期选择器)有格式DD.MM.YYYY

我正在创建一个网站,让用户看到与日期相关的时间

我可以在检查数据库之前将字符串转换为否等于.$date

或者将datepicker的格式更改为YYYY.MM.DD而不是更好?

+0

之间更改日期选择器的格式是最简单的解决方案,如果用户同意。 –

回答

0

这是怎么了,我终于解决了这个问题:

$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,并根据我的表中的子字符串日期进行检查。

所以查询打印所有: 日期,开始时间,结束时间 两个日期

0

如何摆脱子字符的东西,并用它来代替?

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 

并且您将获得非常好的性能优势。

+0

我试着运行这个: SELECT TIME(DateFrom)AS从 FROM日历 WHERE DATE(DateFrom)= STR_TO_DATE('22 .02.2014','%d。%m。%Y') 但我得到#1064时运行这个 – user3392688

+0

'FROM'是一个保留字;我应该抓住那个。看我的编辑。 –

相关问题