SQL Server日期函数集合

SQL Server日期函数集合_SQL Server_开发学院

–参考http://msdn.microsoft.com/zh-cn/library/ms186724.aspx
–1:获取系统日期和时间值函数
–getdate()
SELECT GETDATE() AS ‘today’
–getutcdate()
SELECT GETUTCDATE() AS ‘today’

–2:修改日期和时间值函数
–dat
–参考http://msdn.microsoft.com/zh-cn/library/ms186724.aspx
–1:获取系统日期和时间值函数
–getdate()
SELECT GETDATE() AS ‘today’
–getutcdate()
SELECT GETUTCDATE() AS ‘today’

–2:修改日期和时间值函数
–dateadd()
SELECT DATEADD(yy,10,GETDATE())
–获取当前天的前后五天日期:
select DATEADD(dd,5,GETDATE())
select DATEADD(dd,-5,GETDATE())
–2008? switchoffset
–SELECT SWITCHOFFSET (‘1998-09-20 7:45:50.71345 -5:00’, ‘-08:00’)
–2008? todatetimeoffset

–3:获取日期和时间差函数
–datediff()
SELECT DATEDIFF(yy,’1984/5/3′,GETDATE())
–正常使用
SELECT DATEDIFF(HOUR,’1984/5/3′,GETDATE())
–转换成正数(负负得正)
SELECT DATEDIFF(MONTH,GETDATE(),’1984/5/3′)*-1

–4:获取日期和时间部分的函数
–①datepart()返回表示指定date的指定datepart的整数:int
SELECT DATEPART(yy,GETDATE()),DATEPART(yyyy,GETDATE()) as ‘year’
SELECT DATEPART(mm,GETDATE()),DATEPART(m,GETDATE()) as ‘month’
SELECT DATEPART(dd,GETDATE()),DATEPART(d,GETDATE()) as ‘day’
SELECT DATEPART(hh,GETDATE()) as ‘Hour’
SELECT DATEPART(mi,GETDATE()),DATEPART(n,GETDATE()) as ‘minute’
SELECT DATEPART(ss,GETDATE()),DATEPART(s,GETDATE()) as ‘second’
SELECT DATEPART(ms,GETDATE()) as ‘millisecond’
–others
SELECT DATEPART(DW,GETDATE()),DATEPART(dw,GETDATE()),DATEPART(w,GETDATE()) as ‘weekday’–一周中的第几天
SELECT DATEPART(weekday, getdate() + @@DateFirst – 1)–中国星期算法中一周中的星期几
SELECT DATEPART(weekday, getdate() – 1)–中国星期算法中一周中的星期几
SELECT DATEPART(ww,GETDATE()),DATEPART(wk,GETDATE()) as ‘week’–?
SELECT DATEPART(dy,GETDATE()),DATEPART(y,GETDATE()) as ‘dayofyear’–一年中的第几天
SELECT DATEPART(qq,GETDATE()),DATEPART(q,GETDATE()) as ‘quarter’–季度
SELECT DATEPART(qq,’2010-03-21′),DATEPART(q,’2010-04-01′) as ‘quarter’
–年(yy),季(q),月(m),周(ww),时期(w),天(d),时(hh),分(n),秒(s)

–②datename()返回表示指定日期的指定datepart的字符串:nvarchar
SELECT DATENAME(weekday,GETDATE())–星期三
SELECT DATENAME(WW, GETDATE())–?

–③year(),相当于 datepart(yy,时间)
SELECT YEAR(GETDATE())

–④month(),相当于datepart(mm,时间)
SELECT MONTH(GETDATE())

–⑤day(),相当于datepart(dd,时间)
SELECT DAY(GETDATE())
SELECT DAY(‘1984/5/3’)

–5:验证日期和时间值的函数
SELECT ISDATE(’04/15/2008′); –Returns 1.
SELECT ISDATE(’15/04/2008′); –Returns 0.

–2008?
–SELECT CONVERT (date, GETDATE());
–SELECT CONVERT (time, GETDATE());
参数说明:

日期部分

缩写

year

yy, yyyy

quarter

qq, q

month

mm, m

dayofyear

dy, y

day

dd, d

week

wk, ww

weekday

dw

Hour

hh

minute

mi, n

second

ss, s

millisecond

ms

Date 和 Time 样式

–语句及查询结果:
SELECT CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
SELECT CONVERT(varchar(100), GETDATE(), 1): 05/16/06
SELECT CONVERT(varchar(100), GETDATE(), 2): 06.05.16
SELECT CONVERT(varchar(100), GETDATE(), 3): 16/05/06
SELECT CONVERT(varchar(100), GETDATE(), 4): 16.05.06
SELECT CONVERT(varchar(100), GETDATE(), 5): 16-05-06
SELECT CONVERT(varchar(100), GETDATE(), 6): 16 05 06
SELECT CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
SELECT CONVERT(varchar(100), GETDATE(), 8): 10:57:46
SELECT CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
SELECT CONVERT(varchar(100), GETDATE(), 10): 05-16-06
SELECT CONVERT(varchar(100), GETDATE(), 11): 06/05/16
SELECT CONVERT(varchar(100), GETDATE(), 12): 060516
SELECT CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
SELECT CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
SELECT CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
SELECT CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
SELECT CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
SELECT CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
SELECT CONVERT(varchar(100), GETDATE(), 24): 10:57:47
SELECT CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
SELECT CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
SELECT CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
SELECT CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
SELECT CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
SELECT CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
SELECT CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
SELECT CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
SELECT CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
SELECT CONVERT(varchar(100), GETDATE(), 108): 10:57:49
SELECT CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
SELECT CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
SELECT CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
SELECT CONVERT(varchar(100), GETDATE(), 112): 20060516
SELECT CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
SELECT CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
SELECT CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
SELECT CONVERT(varchar(100), GETDATE(), 121): 2006

对上面进行动态生成字符串:

declare @sql1 nvarchar(200),@sql2 nvarchar(200)
declare @count nvarchar(100);
set @sql1 = ‘SELECT CONVERT(varchar(100), GETDATE(), 0)’
set @sql2 = ‘SELECT @count = CONVERT(varchar(100), GETDATE(), 0)’
exec sp_executesql @sql2,N’@count nvarchar(50) out’,@count out
print @sql1 +’:’+ @count

–SQL Server 仅保证往返转换(即从原始数据类型进行转换后又返回原始数 据类型的转换)在各版本间产生相同值。
DECLARE @myval decimal (5, 2)
SET @myval = 193.57
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5))
— Or, using CONVERT
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))
–输出193.57000
–输 出193.57000

–bigint数据类型的字段截取(其它类型也一样)
select substring(CONVERT(varchar(15),字段名),11,9) from 表名
select substring(cast(字段名 as varchar(50),6,9)) from 表名

不带世纪数位 (yy) (1) 带世纪数位 (yyyy) 标准 输入/输出 (3)

0 或 100 (1,2)

默 认

mon dd yyyy hh:miAM(或 PM)
1

101

美 国

mm/dd/yyyy
2

102

ANSI

yy.mm.dd
3

103

英 国/法国

dd/mm/yyyy
4

104

德 国

dd.mm.yy
5

105

意 大利

dd-mm-yy
6

106(1)

dd mon yy
7

107(1)

mon dd, yy
8

108

hh:mi:ss

9 或 109 (1,2)

默 认设置 + 毫秒

mon dd yyyy hh:mi:ss:mmmAM(或 PM)
10

110

美 国

mm-dd-yy
11

111

日 本

yy/mm/dd
12

112

ISO

yymmdd
yyyymmdd

13 或 113 (1,2)

欧 洲默认设置 + 毫秒

dd mon yyyy hh:mi:ss:mmm(24h)
14

114

hh:mi:ss:mmm(24h)

20 或 120 (2)

ODBC 规范

yyyy-mm-dd hh:mi:ss(24h)

21 或 121 (2)

ODBC 规范(带毫秒)

yyyy-mm-dd hh:mi:ss.mmm(24h)

126 (4)

ISO8601

yyyy- mm-ddThh:mi:ss.mmm(无空格)

127(6, 7)

带时区 Z 的 ISO8601。

yyyy-mm-ddThh:mi:ss.mmmZ
(无 空格)

130 (1,2)

回历 (5)

dd mon yyyy hh:mi:ss:mmmAM

131 (2)

回历 (5)

dd/mm/yy hh:mi:ss:mmmAM

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

What is 11 + 10 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)