mysql sql日期模糊_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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值