我有一個存儲過程,需要一個字符串參數的日期。 。在外觀來與數據庫中的日期爲保存形式2012-02-26 06:00:00.000
(時間是附屬於他們的形式yyyy-MM-dd
的數據當我運行SQL它始終沒有返回值,因爲它無法找到一個比較:比較字符串日期到日期時間
'select t_typday from ' + @dbName+ '.dbo.Calendar ' +
' where T_date LIKE ''' + @dateFilter + '%''';
我有一個存儲過程,需要一個字符串參數的日期。 。在外觀來與數據庫中的日期爲保存形式2012-02-26 06:00:00.000
(時間是附屬於他們的形式yyyy-MM-dd
的數據當我運行SQL它始終沒有返回值,因爲它無法找到一個比較:比較字符串日期到日期時間
'select t_typday from ' + @dbName+ '.dbo.Calendar ' +
' where T_date LIKE ''' + @dateFilter + '%''';
您需要將日期轉換在表中的yyyy-mm-dd hh:mi:ss.mmm
日期。在comparin之前的格式使用LIKE
該格式的字符串參數g它:
要解決以最小的改變現有代碼,改變T_date
到CONVERT(VARCHAR(50),T_date,121)
,生產:
'select t_typday from ' + @dbName+ '.dbo.Calendar ' +
' where CONVERT(VARCHAR(50),T_date,121) LIKE ''' + @dateFilter + '%''';
如果不執行轉換,你是比較一個本地格式字符串(基於@@LANGUAGE
設置),如Apr 12 2012 12:00AM
與您的@dateFilter
字符串包含,例如,2012-04-12
。這就是爲什麼比較不起作用。
當然,將DATE
類型的參數傳入存儲過程將會是一個更好的解決方案,因爲有幾條評論已經提到。這將使你在@dateFilter
比較日期T_date
與DATE
值傳遞使用一個簡單的表達,如:
CONVERT(DATE,T_date)[email protected]
如何將這個動態sql更改爲@dateFilter作爲日期時間? – 2012-04-23 14:54:24
您可以通過'CONVERT(DATETIME,@ dateFilter)'在存儲過程中進行轉換,或者只是將存儲過程本身中的參數類型更改爲類型'DATETIME'而不是'VARCHAR(50)'或者其他任何是。如果您只想將日期作爲過濾器,請將參數設置爲「DATE」類型的存儲過程,然後使用簡單的「CONVERT(DATE,T_date)= @ dateFilter」進行比較。 – 2012-04-23 14:55:19
您存儲日期時間值_strings _ ??? – Oded 2012-04-23 14:40:35
更重要的問題是:爲什麼你根據日期時間字段傳遞字符串?相反,使用類型爲「datetime」的參數(恐怕你也可以打開SQL注入)。 – 2012-04-23 14:41:06
會解決我的比較問題嗎? – 2012-04-23 14:42:11