當前位置:首頁 » 編程語言 » sql模糊查詢日期
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql模糊查詢日期

發布時間: 2023-08-28 23:08:37

Ⅰ 關於sql模糊查詢日期時間的方法

有以下三種方法:

1、Convert轉成String,在用Like查詢

select * from table1 where convert(varchar,yourtime,120) like '2017-06-30%'

2、Between

select * from table1 where yourtime between '2017-06-30 0:00:00' and '2017-06-30 24:59:59'";

3、datediff()函數

select * from table1 where datediff(day,yourtime,'2017-06-30')=0

(1)sql模糊查詢日期擴展閱讀:

滾與上述日期格式的like模糊查詢的注意事項

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

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

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

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

Ⅱ SqlServer資料庫中,日期的模糊查詢

1、打開SQL Server Management Studio管理工具,點擊【新建查詢】,新建一個SQL書寫窗口,用於演示SQL的執行。

Ⅲ sql日期的模糊查詢

select
*
表名
from
欄位名
between
'年月日
時分秒'
and
'年月日
時分秒'
還可以
select
*
from
dbo.PLAT_SendMsgRet
where
時間欄位>'年月日
時分秒'

Ⅳ SQL時間段查詢+模糊查詢

沒有給出太多的信息.我就直接寫吧:
SELECT * FROM 表A
where
--這個是時間段查詢
時間列 BETWEEN GETDATE()-1 AND GETDATE()
--模糊查詢
AND column1 like '%這個是模糊查詢的內容%'
歡迎追問~

Ⅳ Sql優化-多like模糊查詢及根據時間排序

2020-04-21

記錄一次sql優化記錄:

環境:用的mysql版本  select Version();

優化過程:

用的是兩張表聯查,四個條件like查詢 ,根據時間排序降序

其中A,B表沒有大欄位,A表20萬多數據,B表50萬多條數據。語句如下:

EXPLAIN

SELECT A.bondId,A.sname,A.cname,A.secuCode,A. ISSUER,A.guarantor,B.underwriter AS infoSource

  FROM   A

  LEFT JOIN  B ON B.bondId = A.bondId

 WHERE B.agentType = 1

 AND B.underwriter = '有限公司'

 AND A.startDate <= '2020-04-21 18:02:10'

 AND A.endDate >= '2020-04-21 18:02:10'

 AND (

 A.cname LIKE '%%'  OR A.sname LIKE '%%'  OR A.secuCode LIKE '%%'

 OR A. ISSUER LIKE '%%'OR A.guarantor LIKE '%%')

 AND A.isValid = 1

 ORDER BY A.startDate DESC

 LIMIT 0, 20

這是2個表都沒有加索引的情況,從explain來看結果非常糟糕,都是全表掃描,並且產生臨時表同時有文件排序,效率肯定非常低。

首先嘗試在B表上建立一個聯合索引

可以考慮從關聯欄位及where條件欄位考慮(bondId, underwriter, agentType)

建一個聯合索引,試試。

ALTER TABLE B ADD INDEX bua_index(bondId, underwriter, agentType)

再explain看:

可以看到B表用到了我們剛剛建的聯合索引,並且額外信息是Using index ,type是ref級別的,效果比較理想,再來看A表。

Where條件中有多個like,這種情況下一般索引都是不可用的,所以必須用覆蓋索引解決,

由於又根據startDate排序,所以嘗試根據如下欄位建立聯合索引,同時查詢的欄位就是索引中的欄位(startDate, endDate,cname, sname, secuCode, issuer, guarantor)

ALTER TABLE A ADD INDEX index_scssig(startDate, endDate,cname, sname, secuCode, issuer, guarantor)

再次explain看看效果:

這樣乍看上去A表也用到了剛剛建的聯合索引,並且type是range級別雖然比ref差點,按理說應該也還可以,但是我執行sql語句,效率還是非常差,查詢耗時達到8s,並且偶爾還不止這個時間

究其原因,雖然使用了索引,但是extra裡面是Using index condition&Using where

回表操作了,我在想如果將extra優化成Using index效率肯定沒問題

故再進一步優化,還是從索引入手

在聯合索引上添加2個欄位isValid, bondId 再試試

ALTER TABLE A ADD INDEX index_scssig(isvalid,startDate, endDate,cname, sname, secuCode, issuer, guarantor,bondId)

再次explain:

這個結果就是我想要的,然後執行sql看看效率:

已經提升了很多了,但是我試了別的查詢條件偶爾時間會到3,4s,懷疑和自己的機器有關

在這這種多個like的or查詢mysql本身並不擅長,無奈坑爹的需要需要這樣,可能效率並不是非常的高,優化成這樣可以接受了。

最近對以前項目的慢查詢進行sql調優,感覺性能的下降往往還是sql語句及索引的建立的問題,explain是很有幫助,正確優化還是能極大提升效率的。

Ⅵ 關於SQL模糊查詢日期時間的方法

1、野塌Convert轉成String,在用Like查詢。

select*fromtable1 whereconvert(varchar,yourtime,120) like '2017-06-30%'

2、Between

select*fromtable1whereyourtime between '2017-06-30 0:00:00' and '2017-06-30 24:59:59'";

3、datediff()函數芹歷

select*fromtable1 wheredatediff(day,yourtime,'2017-06-30')=0

(6)sql模糊查詢日期擴展閱讀

表達式DateDiff(timeinterval,date1,date2 [, firstdayofweek [, firstweekofyear]])

允許數據類型: timeinterval 表示相頌首圓隔時間的類型,代碼為:

年份 yy、yyyy 季度 qq、q

月份 mm、m

每年的某一日 dy、y

日期 dd、d

星期 wk、ww

工作日 dw

小時 hh

分鍾 mi、n

秒 ss、s

毫秒 ms

Ⅶ sql 查詢日期並且要能夠實現模糊查詢

select * from T where datediff(d,lw_publish_date,convert(varchar(10),'2010-01-01',120))=0
把convert(varchar(10),'2010-01-01',120)時間轉一下就成了不帶時分秒的時間'2010-01-01',
datediff(Z,欄位,P)=0 其中Z就是代表Y(年分),M(月份),D(日)中任意一個,P就是代表你要的那個日期 例如:'2010-01-01'

Ⅷ sql對關於時間的模糊查詢(convert LIKE 等等)具體語句如下:

select count(*) from [FRU_PROJECT_DEMAND] where Convert(varchar(10),PRO_MISSION_NO,120) = Convert(varchar(10),getdate(),120)