[英]Query comparing dates in SQL
我有一張表,上面寫着所有發生在 11 月的日期。 我寫了這個查詢
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= '2013-04-12'
此查詢應返回在第 11 個月(11 月)發生的所有事情,因為它發生在日期“2013-04-12”(12 月)之前
但它只返回發生在小於 04 (2013- 04 -12) 天的可用日期
難道它只是比較白天的部分? 而不是整個日期?
如何解決這個問題?
Created_date 是日期類型
日期格式默認為yyyy-dd-MM
而不是'2013-04-12',其含義取決於當地文化,使用被認為是文化不變格式的'20130412'。
如果你想與12月4 日比較,你應該寫'20131204'。 如果你想與4月12 日比較,你應該寫'20130412'。
SQL Server文檔中的寫國際Transact-SQL語句的文章解釋了如何編寫文化不變的語句:
使用其他API或Transact-SQL腳本,存儲過程和觸發器的應用程序應使用未分隔的數字字符串。 例如,yyyymmdd為19980924。
編輯
由於您使用的是ADO,因此最好的選擇是參數化查詢並將日期值作為日期參數傳遞。 這樣您就可以完全避免格式問題,並獲得參數化查詢的性能優勢。
UPDATE
要在文字中使用ISO 8601格式,必須指定所有元素。 引用datetime文檔的ISO 8601部分
要使用ISO 8601格式,必須以格式指定每個元素。 這還包括T,冒號(:)和格式中顯示的句點(。)。
......第二個組件的分數是可選的。 時間組件以24小時格式指定。
試試這樣吧
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= '2013-12-04'
如果您僅與日期值進行比較,則將其轉換為日期(而不是日期時間 )將起作用
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= convert(date,'2013-04-12',102)
在使用GetDate()函數期間,此轉換也適用
你把<=
並且它也將捕獲給定的日期。 您可以用<
only替換它。
請嘗試以下查詢
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
convert(datetime, convert(varchar(10), created_date, 102)) <= convert(datetime,'2013-04-12')
嘗試在日期之前和之后使用“#”,並確保您的系統日期格式。 也許“YYYYMMDD O YYYY-MM-DD O MM-DD-YYYY O使用'/ O \\'”
例如:
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= #2013-04-12#
日期格式為yyyy-mm-dd。 因此上述查詢正在查找早於12Apr2013的記錄
建議你通過將日期字符串設置為'2013-04-30'進行快速檢查,如果沒有sql錯誤,則確認日期格式為yyyy-mm-dd。
將它們轉換為相同格式的日期,然后您可以進行比較。 像這樣:
where convert(date, created_date,102) <= convert(date, /*102 is ANSI format*/
substring('2013-04-12',1,4) + '.' + /*year*/
substring('2013-04-12',9,2) + '.' + /*month*/
substring('2013-04-12',6,2) /*day*/
,102)
您還可以使用 to_char(column_name, 'YYYY-MM-DD) 更改格式
下面的查詢可用於查找 2013 年 11 月的記錄。
Select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where Month(created_date) = 11 and Year(created_date) = 2013
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.