SQL Server日期函数总结

获得一个月的天数:首先到得一个月最后一天的日期,通过 SQL Server 日期函数 day() 取得日期中的“天 ”部分

获得 2008 年 2 月份的天数:
select day(cast('2008-03-01' as datetime) - 1)

获得本月天数:

返回一个整数,该整数表示指定的 date 是该月份的哪一天。

select day(dateadd(month,1,getdate()) - day(getdate()))

获得上个月天数:
select day(getdate()-day(getdate()))

注:SQL Server 日期函数 day(@date) 等价于日期函数 datepart(day,@date)


1.  当前系统日期、时间
    select getdate() 
2. dateadd  在向指定日期加上一段时间的基础上,返回新的 datetime 值
   例如:向日期加上2天
   select dateadd(day,2,'2004-10-15')  --返回:2004-10-17 00:00:00.000 

3. datediff 返回跨两个指定日期的日期和时间边界数。
   select datediff(day,'2004-09-01','2004-09-18')   --返回:17
4. datepart 返回代表指定日期的指定日期部分的整数。
  SELECT DATEPART(month, '2004-10-15')  --返回 10
5. datename 返回代表指定日期的指定日期部分的字符串
   SELECT datename(weekday, '2004-10-15')  --返回:星期五

6. day(), month(),year() --可以与datepart对照一下

值 缩 写(Sql Server) (Access 和 ASP) 说明
Year Yy yyyy 年 1753 ~ 9999
Quarter Qq q  季 1 ~ 4
Month Mm m  月1 ~ 12
Day of year Dy y 一年的日数,一年中的第几日 1-366
Day Dd d  日,1-31
Weekday Dw w 一周的日数,一周中的第几日 1-7
Week Wk ww 周,一年中的第几周 0 ~ 51
Hour Hh h  时0 ~ 23
Minute Mi n 分钟0 ~ 59
Second Ss s 秒 0 ~ 59
Millisecond Ms - 毫秒 0 ~ 999

举例:
1.GetDate() 用于sql server :select GetDate()
2.DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值为 514592 秒
DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值为 5 天
3.DatePart('w','2005-7-25 22:56:32')返回值为 2 即星期一(周日为1,周六为7)
DatePart('d','2005-7-25 22:56:32')返回值为 25即25号
DatePart('y','2005-7-25 22:56:32')返回值为 206即这一年中第206天

DatePart('yyyy','2005-7-25 22:56:32')返回值为 2005即2005年


善用 SQL Server 中的 CONVERT 函數處理日期字串:

例如說初學者可能為了輸入一個 "2008-2-27" 的格式會這樣寫:

[html]  view plain copy print ?
  1. select convert(varchar(4),Year(getdate())) '-' convert(varchar(2), month(getdate()))+ '-' convert(varchar(2), day(getdate()))  
但如過客戶要求 "2008-02-27" 這種格式呢?!我看會寫瘋掉了,你可能會這樣寫:
[html]  view plain copy print ?
  1. select  
  2. convert(varchar(4),Year(getdate())) '-'  
  3. CASE month(getdate())  
  4. WHEN THEN '0' convert(varchar(2), month(getdate()))  
  5. WHEN THEN '0' convert(varchar(2), month(getdate()))  
  6. WHEN THEN '0' convert(varchar(2), month(getdate()))  
  7. WHEN THEN '0' convert(varchar(2), month(getdate()))  
  8. WHEN THEN '0' convert(varchar(2), month(getdate()))  
  9. WHEN THEN '0' convert(varchar(2), month(getdate()))  
  10. WHEN THEN '0' convert(varchar(2), month(getdate()))  
  11. WHEN THEN '0' convert(varchar(2), month(getdate()))  
  12. WHEN THEN '0' convert(varchar(2), month(getdate()))  
  13. ELSE convert(varchar(2), month(getdate())) END  
  14. '-'  
  15. CASE day(getdate())  
  16. WHEN THEN '0' convert(varchar(2), day(getdate()))  
  17. WHEN THEN '0' convert(varchar(2), day(getdate()))  
  18. WHEN THEN '0' convert(varchar(2), day(getdate()))  
  19. WHEN THEN '0' convert(varchar(2), day(getdate()))  
  20. WHEN THEN '0' convert(varchar(2), day(getdate()))  
  21. WHEN THEN '0' convert(varchar(2), day(getdate()))  
  22. WHEN THEN '0' convert(varchar(2), day(getdate()))  
  23. WHEN THEN '0' convert(varchar(2), day(getdate()))  
  24. WHEN THEN '0' convert(varchar(2), day(getdate()))  
  25. ELSE convert(varchar(2), day(getdate())) END  

別笑!我真的看過有人這樣寫!呵呵~

其實 SQL Server 早就有個 CONVERT 函數可以幫我們做這件事!如果你要輸出 2008-02-27 這種日期格式的字串,可以這樣寫:

[html]  view plain copy print ?
  1. SELECT CONVERT(char(10), getdate(), 120)  

下列出一些我常用的語法:
  • 輸出格式:2008-02-27 00:25:13

    SELECT CONVERT(char(19), getdate(), 120)
  • 輸出格式:2008-02-27

    SELECT CONVERT(char(10), getdate(), 12)
  • 輸出格式:2008.02.27

    SELECT CONVERT(char(10), getdate(), 102)
  • 輸出格式:08.02.27

    SELECT CONVERT(char(8), getdate(), 2)
  • 輸出格式:2008/02/27

    SELECT CONVERT(char(10), getdate(), 111)
  • 輸出格式:08/02/27

    SELECT CONVERT(char(8), getdate(), 11)
  • 輸出格式:20080227

    SELECT CONVERT(char(8), getdate(), 112)
  • 輸出格式:080227

    SELECT CONVERT(char(6), getdate(), 12)

想查詢完整的列表與說明可以到 MSDN 的 Transact-SQL Reference 去查詢 CAST and CONVERT 的詳細說明。


在数据库取出来的时候就转换好
select getdate()
2006-05-12 11:06:08.177

select Convert(varchar(10),getdate(),120)
2006-05-12


select CONVERT(varchar, getdate(), 120 )
2006-05-12 11:06:08

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

select CONVERT(varchar(12) , getdate(), 111 )
2006/05/12

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

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

其它几种不常用的日期格式转换方法:

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

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

select CONVERT(varchar(12) , getdate(), 105 )
12-05-2006

select CONVERT(varchar(12) , getdate(), 106 )
12 05 2006

select CONVERT(varchar(12) , getdate(), 107 )
05 12, 2006

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

select CONVERT(varchar(12) , getdate(), 109 )
0512 2006 1

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

select CONVERT(varchar(12) , getdate(), 113 )
12 052006

select CONVERT(varchar(12) , getdate(), 114 )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值