日期函数与转型

今天到今年最后一天,输出每天的星期

--今年最后一天
DECLARE @lastDay_year VARCHAR(20)
--今天
DECLARE @nowDay VARCHAR(20)

SELECT  @lastDay_year = CONVERT(VARCHAR(10), DATEADD(ms, -3,DATEADD(yy,DATEDIFF(yy, 0,GETDATE()) + 1,0)), 120) ;

SELECT  @nowDay = CONVERT(VARCHAR(10), DATEADD(dd, DATEDIFF(dd, 0, GETDATE()),0), 120) ;
--其实上一句的效果和下方这个是一样的
--SELECT  @nowDay = CONVERT(VARCHAR(10), GETDATE() , 120)
WHILE ( @nowDay <= @lastDay_year ) 
    BEGIN
        DECLARE @nowDay_week INT
        --星期
        SELECT  @nowDay_week = DATEPART(weekday, @nowDay)
        PRINT @nowDay + '  ' + CAST(@nowDay_week AS VARCHAR) + '  '+ DATENAME(weekday, @nowDay)    
        SELECT  @nowDay = CONVERT(VARCHAR(10), DATEADD(d, 1,CONVERT(VARCHAR(10), @nowDay, 120)), 120) ;
    END

 结果:

2013-10-31  5  Thursday
2013-11-01  6  Friday
2013-11-02  7  Saturday
2013-11-03  1  Sunday
2013-11-04  2  Monday
2013-11-05  3  Tuesday
2013-11-06  4  Wednesday
2013-11-07  5  Thursday
2013-11-08  6  Friday
2013-11-09  7  Saturday
2013-11-10  1  Sunday
2013-11-11  2  Monday
2013-11-12  3  Tuesday
2013-11-13  4  Wednesday
2013-11-14  5  Thursday
2013-11-15  6  Friday
2013-11-16  7  Saturday
2013-11-17  1  Sunday
2013-11-18  2  Monday

 

主要用到的函数有


GETDATE GETDATE() 函数从 SQL Server 返回当前的时间和日期。

语法

GETDATE()

例子

SELECT GETDATE() AS CurrentDateTime

结果:

2013-10-31 13:55:48.580

 


DATEDIFF DATEDIFF() 函数返回两个日期之间的天数。

语法

DATEDIFF(datepart,startdate,enddate)

startdate enddate 参数是合法的日期表达式。

datepart 参数可以是下列的值:

table 1

datepart 缩写
yy, yyyy
季度 qq, q
mm, m
年中的日 dy, y
dd, d
wk, ww
星期 dw, w
小时 hh
分钟 mi, n
ss, s
毫秒 ms
微妙 mcs
纳秒 ns

例子:

SELECT DATEDIFF(day,'2013-10-29','2013-10-31')


结果:

2

 


DATEADD DATEADD() 函数在日期中添加或减去指定的时间间隔。

语法

DATEADD(datepart,number,date)

date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。

datepart 参数可以是同table1的值

例子:

    SELECT GETDATE()
    SELECT DATEADD(DAY,2,GETDATE())

结果:

2013-10-31 14:00:31.463

2013-11-02 14:00:31.463

 


DATEPART 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。

语法:

DATEPART(datepart,date)

date 参数是合法的日期表达式。datepart 参数可以是上面table1的值:

例子: 

SELECT DATEPART(weekday,'2013-10-30 00:00:00.000')

结果:

4

默认的星期一 是 2,下面的语句可设置从星期一开始计数

-- 设置每周星期1为第1天
SET datefirst 1 ;

例子:

SET DATEFIRST 1;
SELECT DATEPART(weekday,'2013-10-30 00:00:00.000');

结果:

3


DATENAME  返回代表指定日期的指定日期部分的字符串。

语法:

DATENAME ( datepart , date )

date 参数是合法的日期表达式。datepart 参数可以是上面table1的值:

例子:

与 DATEPART 比较

SELECT DATENAME(month, '2013-10-30 00:00:00.000')
SELECT DATENAME(weekday, '2013-10-30 00:00:00.000')
SELECT DATEPART(month, '2013-10-30 00:00:00.000')
SELECT DATEPART(weekday, '2013-10-30 00:00:00.000')

结果:

October
Wednesday
10
3

 


CONVERT

CONVERT() 函数是把日期转换为新数据类型的通用函数。

CONVERT() 函数可以用不同的格式显示日期/时间数据。

语法:

CONVERT(data_type(length),data_to_be_converted,style)

data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。

可以使用的 style 值:

Style ID Style 格式
100 或者 0 mon dd yyyy hh:miAM (或者 PM)
101 mm/dd/yy
102 yy.mm.dd
103 dd/mm/yy
104 dd.mm.yy
105 dd-mm-yy
106 dd mon yy
107 Mon dd, yy
108 hh:mm:ss
109 或者 9 mon dd yyyy hh:mi:ss:mmmAM(或者 PM)
110 mm-dd-yy
111 yy/mm/dd
112 yymmdd
113 或者 13 dd mon yyyy hh:mm:ss:mmm(24h)
114 hh:mi:ss:mmm(24h)
120 或者 20 yyyy-mm-dd hh:mi:ss(24h)
121 或者 21 yyyy-mm-dd hh:mi:ss.mmm(24h)
126 yyyy-mm-ddThh:mm:ss.mmm(没有空格)
130 dd mon yyyy hh:mi:ss:mmmAM
131 dd/mm/yy hh:mi:ss:mmmAM

例子:

SELECT CONVERT(VARCHAR(19),GETDATE())
SELECT CONVERT(VARCHAR(10),GETDATE(),120) 
SELECT CONVERT(VARCHAR(25),GETDATE(),120)

结果:

Oct 31 2013  2:15PM
2013-10-31
2013-10-31 14:15:15


CAST 将表达式由一种数据类型转换为另一种数据类型。 

 语法:

 

CAST ( data_to_be_converted AS data_type(length) )

data_to_be_converted 含有需要转换的值。data_type(length) 规定目标数据类型(带有可选的长度)。 

 例子:

SELECT CAST(GETDATE()AS DATE)
SELECT CAST(GETDATE()AS VARCHAR(20))


结果:

2013-10-31
Oct 31 2013  2:34PM

你可能感兴趣的:(日期函数)