簡體   English   中英

varchar列中的匹配日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM