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位年份(轉載)

日期格式的like模糊查詢真的好怪,在一個項目中,我試了很多種查法:

select * from T where sendTime like '%2007_12_%'    可以查詢2007年12月的所有記錄

如果like條件改為'%2007-12-%' ,'%2007_12_3%' ,或'%2007_12_30%' 都查不出數據。還有:

select * from T where sendTime like '%12_30%'    可以查詢12月30日的所有記錄

如果like條件改為'%07_12_30%'  也查不出數據。

一直搞不明白是怎么回事。不過現在找到了一個很好的解決方法:

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

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

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

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

use CitrixSmartAuditor
select b.Name,COUNT(*) from ICLFile a,server b
where Convert(varchar,StartTime,120) LIKE '2019-08-22%'
and a.ServerID = b.ID
group by b.Name
order by b.Name

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM