SQL中日期类型与字符串类型相互转换

本文介绍如何在SQL中正确地进行日期类型与字符串类型的相互转换,确保查询时能准确匹配目标日期,避免因时间精度问题导致的数据遗漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将日期类型转化成yyyy-mm-dd格式的字符串

select convert(varchar(10),getdate(),120)执行后的效果是2009-11-05

将字符串类型转化成日期类型

select convert(smalldatetime,'2005-04-02')执行后的效果是2005-04-02 00:00:00

应用:

select * from equipmentInfo where (select convert (smalldatetime,(select convert(varchar(10),inetDate,120)),0)) = (select CONVERT(SMALLDATETIME,'2009-04-02',120))
其中 equipmentInfo是表名,inetDate是字段名,

这句代码的意思是从表equipmentInfo中找出字段inetDate(日期类型)的时间是2009-04-02的记录

为什么写的这么复杂呢,直接写

select * from equipmentInfo where inetDate = '2009-04-02' 不行吗?答案是否定的!

因为时间类型在数据库中的存储格式不是我们所看到的那样。所以我们要把"2009-04-02"转换成数据库能够识别的日期格式,

于是就有了(select CONVERT(SMALLDATETIME,'2009-04-02',120))。

但是这样就可以了吗,代码变成
select * from equipmentInfo where inetDate =(select CONVERT(SMALLDATETIME,'2009-04-02',120))就能够得到我们想要的结果吗?答案当然也是否定的!

因为“=”后面的值是2009-04-02 00:00:00,而“=”左边的可能是2009-04-02 15:22:36,因此即使日期相同,也等式两边也不相等。所以,我们要将左边的时分秒都变成零。

从select convert(smalldatetime,'2004-04-02')制定后的效果是2009-04-02 00:00:00我们可以想到,

把代码改成select convert(smalldatetime,inetDate)似乎是可行的,但是事实情况不是那样的,

因为smalldatetime是精确到秒的,因此我们要把inetDate先转换成字符串类型的,如"2009-04-02",

然后再转换成smalldatetime类型的这样,时分秒的部分都会变成零了。因此就有了

select * from equipmentInfo where (select convert (smalldatetime,(select convert(varchar(10),inetDate,120)),0)) = (select CONVERT(SMALLDATETIME,'2009-04-02',120))

参考文献:http://www.javaeye.com/topic/300130

 

转载于:https://www.cnblogs.com/piaoxueyuan/archive/2012/02/06/2339714.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值