当前位置:首页 » 编程语言 » 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)