2010-06-30 43 views
1

使用MySQL & SQL服務器如何獲得一個總天數

ID sDate 

001 03/06/2010 
002 07/08/2010 
.... 
.... 

SDATE數據類型爲varchar 格式mm/dd/yyyy的

我想借此日期計數裝置有多少天仍然是在那裏,它應該比較系統日期...

如何將我的varchar轉換爲datetime數據類型,然後如何將mysdate與系統進行比較以獲取總計天數

sDate - SystemDate = Totalday 

ExpectedOutput

ID sDate Totaldays 

001 03/07/2010 3 days 
002 07/07/2010 7 days 
..... 

如何使這個狀態的查詢。需要查詢幫助。

+1

您可能需要考慮將您的數據類型更改爲實際的日期類型。當使用任何內置的MySQL DATE函數時,每次都會進行類型轉換,這可能會導致性能很差。 – 2010-06-30 03:58:40

+0

重新看起來與mysql無關的問題 – 2010-06-30 04:54:35

+0

我只需要mysql查詢... – Gopal 2010-06-30 04:56:55

回答

7

您的問題聲明的MySQL & SQL Server,以便在這裏既:

SQL服務器datediff功能:

SELECT ID, DATEDIFF(DAY, GETDATE(), CONVERT(DATETIME, sDate)) FROM TABLE 

MySQL的datediff功能:

SELECT ID, DATEDIFF(CURDATE(), STR_TO_DATE(sDate, '%c/%d/%Y')) FROM TABLE 

它使用STR_TO_DATE功能轉換將varchar設置爲日期並假定日期字符串的格式爲m格式onth /日/年。

+0

它是MySQL的查詢? – 2010-06-30 04:43:42

+1

這是一個SQL服務器查詢 – 2010-06-30 04:47:44

+0

當我在mysql中運行上述查詢時,它顯示錯誤爲「您在sqlserver語法中有錯誤;檢查與您的mysql服務器版本對應的手冊, 「 - Gopal 10分鐘前 – Gopal 2010-06-30 04:55:32

0

戈帕爾,響應你的「如何爲varchar轉換爲datetime在mysql中......」,這很容易:

ALTER TABLE sometable CHANGE sDate sDate datetime; 

和MySQL會很樂意嘗試將值轉換爲您服務。但是,如果它無法正確解析原始日期字符串,則該記錄的sDate將設置爲NULL0000-00-00。您必須先按摩sDate字段,才能將其轉換爲日期字符串的更正常的MySQL格式,即YYYY-MM-DD。包含了暴力破解的黑客是:

UPDATE sometable SET sDate=CONCAT(
    SUBSTR(sDate, 6, 4), 
    '/', 
    SUBSTR(sDate, 3, 2), 
    '/', 
    SUBSTR(sDate, 0, 2) 
); 

當然,這是假設你的日期是在DD/MM/YYYY格式。如果他們是MM/DD/YYYY,那麼交換中間和最後的SUBSTR調用。完成此更新後,即可使用ALTER TABLE更改字段類型。

當然,對於任何影響整個表格的事情,請確保先備份它。