将日期类型转化成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

 

posted on 2012-02-06 11:14  飘雪媛媛  阅读(2900)  评论(0编辑  收藏  举报