SQL Server日期查询时的日期格式转换

just posted @ 2008年12月25日 17:17 in 数据库 with tags sql server , 1453 阅读

 问题提出:
         经常会有这样的查询要求,输入或者日历控件产生的日期格式为 yyyy-mm-dd,而数据库中的字段是datetime类型,即yyyy-mm-dd h:mm:ss。如果简单的使用between语句或者=语句进行查询,查询结果可能是错误或者数据不全。
        假设 数据库中有 2008-2-27 日的数据,但直接使用 fielddate='2008-2-27' 或者使用 between '2008-2-27' and '2008-2-27'将不能查到该天的数据。

问题解决:
        使用SQL Server提供的Convert函数进行转换,由于2008-02-27最长是10位,所以使用如下语句convert(varchar(10),fielddate,121))进行转换,其中fielddate为数据表的字段名。这样在查询时数据库得到参数后先自动将数据库内的信息转换为yyyy-mm-dd格式的10位字符,只要与参数相同即可返回查询结果.而convert中的121是指将datetime类型转换为char类型时获得包括世纪位数的4位年份。


使用 CONVERT:
CONVERT (data_type[(length)], expression [, style])

select CONVERT(varchar, getdate(), 120 )
2004-09-12 11:06:08

select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),\'-\',\'\'),\' \',\'\'),\':\',\'\')
20040912110608

select CONVERT(varchar(12) , getdate(), 111 )
2004/09/12

select CONVERT(varchar(12) , getdate(), 112 )
20040912

select CONVERT(varchar(12) , getdate(), 102 )
2004.09.12

select CONVERT(varchar(12) , getdate(), 101 )
09/12/2004

select CONVERT(varchar(12) , getdate(), 103 )
12/09/2004

select CONVERT(varchar(12) , getdate(), 104 )
12.09.2004

select CONVERT(varchar(12) , getdate(), 105 )
12-09-2004

select CONVERT(varchar(12) , getdate(), 106 )
12 09 2004

select CONVERT(varchar(12) , getdate(), 107 )
09 12, 2004

select CONVERT(varchar(12) , getdate(), 108 )
11:06:08

select CONVERT(varchar(12) , getdate(), 109 )
09 12 2004 1

select CONVERT(varchar(12) , getdate(), 110 )
09-12-2004

select CONVERT(varchar(12) , getdate(), 113 )
12 09 2004 1

select CONVERT(varchar(12) , getdate(), 114 )
11:06:08.177

------------------------------------------------

select * from tablename where datepart(yy,LandGData) = 2008   

//   datepart(yy,LandGData)   返回的是年

例如 select datepart(yy,LandGData)  from tablename  where id="1" 

//  LandGData 是日期的字段

-------------------------------------

select * from tablename where datepart(mm,LandGData) = 11  

//   datepart(mm,LandGData)   返回的是月份

例如 select datepart(mm,LandGData)  from tablename  where id=" 1"   

//  LandGData 是日期的字段

  • 无匹配

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter