2014-04-24 37 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'是一個保留字;我應該抓住那個。看我的編輯。 –

相關問題