2016-06-09 71 views
1

我已經寫了下面的代碼&我嘗試搜索特定時期之間的這種錶行:問題一個字符轉換爲datetime

SELECT 'RWH' + P.Hospital_Number AS MRN, 
     P.Date_of_birth, 
     pd.Clinic_date AS Date_Seen, 
     pd.Clinic_type_No 
FROM (Patient_diabetes AS pd 
INNER JOIN Patients AS p ON pd.Patient_No = p.Patient_No) 
INNER JOIN Staff AS s ON pd.Seen_by1_No = s.Staff_No 
WHERE (((pd.Clinic_type_No)=241)) 
--AND hospital_number like '%63028%' 
AND CONVERT(datetime,pd.Clinic_Date,121) BETWEEN '02/04/2015' AND '24/09/2015' 
ORDER BY p.Date_of_birth, 
pd.Clinic_date DESC 

,但我得到了下面的錯誤,任何想法如何解決這一問題? :

消息242,級別16,狀態3,行2炭數據類型 爲datetime數據類型的轉換導致外的範圍內的日期時間值。

+0

是什麼clinic_date的數據類型? –

+0

錯誤消息非常明確 - 您有一些'pd.Clinic_Date'值的格式不正確,SQL Server可以將它們轉換爲'DateTime'。這正是你不應該把日期存儲爲'char'的原因。 – Siyual

+0

您使用的是哪個版本的SQL Server? – Siyual

回答

1

我建議你改變:

AND CONVERT(datetime,pd.Clinic_Date,121) BETWEEN '02/04/2015' AND '24/09/2015' 

要這樣:

AND CONVERT(date,pd.Clinic_Date,121) BETWEEN '2015-04-02' AND '2015-09-24' 
1

我覺得這裏的BETWEEN '02/04/2015' AND '24/09/2015'

問題默認情況下'24/09/2015'轉換成"mm/dd/yyyy"格式的數據。所以沒有24個月。

儘量明確地指向字符串數據的格式:

BETWEEN CONVERT(datetime,'02/04/2015',103) 
    AND CONVERT(datetime,'24/09/2015',103)