-- 字串比較而非日期比較!
SELECT * FROM recharge_info WHERE date < '2023-09-22' AND date > '2023-09-01';
-- 若 date 為 VARCHAR,'2023-09-2' > '2023-09-22' (字典序),結果錯誤
CONVERTCONVERT(data_type(length), expression, style)
-- style 決定輸出格式,常用代碼見下表
| Style | 標準 | 輸出範例 (2023-09-22 10:57:49.123) | 備註 |
|---|---|---|---|
| 0/100 | 預設 | Sep 22 2023 10:57AM | mon dd yyyy hh:miAM |
| 1/101 | 美國 | 09/22/2023 | mm/dd/yyyy |
| 2/102 | ANSI | 2023.09.22 | yyyy.mm.dd |
| 3/103 | 英/法 | 22/09/2023 | dd/mm/yyyy |
| 4/104 | 德 | 22.09.2023 | dd.mm.yyyy |
| 5/105 | 義 | 22-09-2023 | dd-mm-yyyy |
| 6/106 | - | 22 Sep 2023 | dd mon yyyy |
| 7/107 | - | Sep 22, 2023 | mon dd, yyyy |
| 8/108 | - | 10:57:49 | hh:mi:ss |
| 9/109 | 預設+毫秒 | Sep 22 2023 10:57:49:123AM | |
| 10/110 | 美 | 09-22-2023 | mm-dd-yyyy |
| 11/111 | 日 | 2023/09/22 | yyyy/mm/dd |
| 12/112 | ISO | 20230922 | yyyymmdd |
| 13/113 | 歐洲預設 | 22 Sep 2023 10:57:49:123 | 24h |
| 14/114 | - | 10:57:49:123 | 24h+毫秒 |
| 20/120 | ODBC | 2023-09-22 10:57:49 | yyyy-mm-dd hh:mi:ss |
| 21/121 | ODBC+毫秒 | 2023-09-22 10:57:49.123 | yyyy-mm-dd hh:mi:ss.mmm |
| 126 | ISO8601 | 2023-09-22T10:57:49.123 | XML/JSON 標準 |
| 130 | Hijri | ... (伊斯蘭曆) | 科威特演算法 |
| 131 | Hijri | .../.../... ... |
規律:style ≥ 100 含世紀 (yyyy);style < 100 兩位年 (yy),易造成 2000 年問題,生產環境禁用。
-- 參數為日期型別 (最佳)
DECLARE @start DATE = '2023-09-01', @end DATE = '2023-09-22';
SELECT * FROM recharge_info
WHERE recharge_date >= @start AND recharge_date < DATEADD(DAY, 1, @end);
-- 參數為字串,顯式轉換
SELECT * FROM recharge_info
WHERE recharge_date >= CONVERT(DATE, '2023-09-01', 120)
AND recharge_date < CONVERT(DATE, '2023-09-23', 120); -- 開區間避免時間分量
>= 開始 AND < 結束+1天:包含結束日全天,避免 23:59:59.997 精度問題WHERE CONVERT(DATE, dt) = ... 失效,改用範圍查詢style 120/121/126 無歧義格式