[英]Match date in a varchar column
我有一個SQL Server表,存儲時間如下(在varchar
列中):
08 SEP 2015 09:15:16
08 SEP 2015 09:15:22
08 SEP 2015 09:15:22
08 SEP 2015 09:15:22
08 SEP 2015 09:15:26
08 SEP 2015 09:15:27
08 SEP 2015 09:15:31
我想編寫一個查詢,該查詢可以為我提供特定月份和年份中的所有條目。 例如“ JAN 2016”等。
我正在使用SQL Server。
如果,你是不是能夠改變日期的類型,你有,那么你將需要與他們投 format()
函數來格式化日期(MMM YYYY)從2012+
SELECT
FORMAT(CAST(<column> AS DATE), 'MMM yyyy') as dates
FROM table t
您還可以使用datepart()
函數過濾日期
WHERE
DATEPART(MONTH, dates) = 1 and DATEPART(year, dates) = 2015
為了只顯示計數,請使用count()
函數
SELECT COUNT(*)
FROM table
WHERE DATEPART(MONTH, dates) = 1 AND
DATEPART(year, dates) = 2015
正如評論中已經提到的,我建議將此數據類型更改為日期/時間戳字段,以避免在嘗試轉換字符串時不存在數據不一致的風險和/或使應用程序的一部分崩潰(不尊重格式)日期對象)。
現在, 當且僅當短期內不可行時 ,您可以通過兩種方式進行:
1.數據轉換:
第一種是提取從表中的所有記錄,他們在進行比較之前轉換為日期類型,但是如果有至少一個varchar
不是一個良好形成的date
,你的查詢將失敗。
2.使用字符串:
另一種方法是使用如下所述的varchar
直接查詢數據庫,以避免這些轉換問題:
select * from table_A where date_column like '%JAN 2016%'
但是,使用like
查詢有點慢,並且只能用作臨時解決方法, 從長遠來看,應適應數據模型以簡化生活,並擁有更穩定/更可靠的應用程序 。
最后但並非最不重要的一點是,嘗試運行一些查詢以檢查數據庫中是否尚未插入一些錯誤的數據(格式或不是日期的字符串)。 您可能已經面臨一些數據不一致問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.