曾經遇到這樣的狀況,在數據庫的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