sql 根據日期模糊查詢&SQL Server dateTime類型 模糊查詢

曾經遇到這樣的狀況,在數據庫的Meeting表中有PublishTime (DateTime,8)字段,用來存儲一個開會時間,在存入時因爲要指明開會具體時間,故格式爲yyyy-mm-dd hh:mm:ss,而咱們查詢時是經過yyyy-mm-dd來進行的,即查詢某一天的全部會議信息,這樣若是經過select * from Meeting where PublishTime=@PublishTime (參數@PublishTime爲yyyy-mm-dd格式)語句進行查詢將沒法獲得正確結果,好比咱們要查詢2004年12月1日的會議信息,在輸入2004-12-01時就不能獲得查詢結果,而這種查詢又不能要求輸入具體的hh:mm:ss.數據庫

此時咱們須要使用convert函數,它能夠將一種數據類型的表達式轉換爲另外一種數據類型的表達式.此處咱們先將數據庫內的datetime類型轉換爲char類型,因爲輸入的參數是10位的,因此寫成函數

select * from Meeting where convert(varchar(10),PublishTime,121))=@PublishTime,這樣在查詢時數據庫獲得參數後先自動將數據庫內的信息轉換爲yyyy-mm-dd格式的10位字符,只要與參數相同便可返回查詢結果.而convert中的121是指將datetime類型轉換爲char類型時得到包括世紀位數的4位年份(轉載)server

日期格式的like模糊查詢真的好怪,在一個項目中,我試了不少種查法:字符串

select * from T where sendTime like '%2007_12_%'    能夠查詢2007年12月的全部記錄it

若是like條件改成'%2007-12-%' ,'%2007_12_3%' ,或'%2007_12_30%' 都查不出數據。還有:class

select * from T where sendTime like '%12_30%'    能夠查詢12月30日的全部記錄date

若是like條件改成'%07_12_30%'  也查不出數據。select

一直搞不明白是怎麼回事。不過如今找到了一個很好的解決方法:數據類型

將數據庫中的時間字段格式改成字符串格式。方法

SELECT * FROM T WHERE Convert(varchar,sendTime,120) LIKE '2007-12-30%'

其中:T爲數據庫的表,sendTime是數據庫中的時間字段的字段名。這樣就能夠查詢2007-12-30的記錄了。

順便把SQL Server中Convert函數的用法貼出來。

use CitrixSmartAuditorselect b.Name,COUNT(*) from ICLFile a,server bwhere Convert(varchar,StartTime,120) LIKE '2019-08-22%' and a.ServerID = b.IDgroup by b.Nameorder by b.Name

相關文章
相關標籤/搜索