SQL SERVER-日期时间
一、时间戳
1 --SQL里面有个DATEADD的函数。时间戳就是一个从1970-01-01 08:00:00到时间的相隔的秒数。 2 --所以只要把这个时间戳加上1970-01-01 08:00:00这个时间就可以得到你想要的时间了 3 4 SELECT DATEADD(S,1160701488,'1970-01-01 08:00:00') --时间戳转换成普通时间 5 6 SELECT DATEDIFF(S,'1970-01-01 08:00:00', GETDATE()) --普通时间转换成时间戳
二、日期格式化
1 Sql Server 中一个非常强大的日期格式化函数 2 Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM 3 Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06 4 Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16 5 Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06 6 Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06 7 Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06 8 Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06 9 Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06 10 Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46 11 Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM 12 Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06 13 Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16 14 Select CONVERT(varchar(100), GETDATE(), 12): 060516 15 Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937 16 Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967 17 Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47 18 Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157 19 Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM 20 Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16 21 Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47 22 Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250 23 Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM 24 Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006 25 Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16 26 Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006 27 Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006 28 Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006 29 Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006 30 Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006 31 Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49 32 Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM 33 Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006 34 Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16 35 Select CONVERT(varchar(100), GETDATE(), 112): 20060516 36 Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513 37 Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547 38 Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49 39 Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700 40 Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827 41 Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM 42 Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM
三、日期的加减函数: DATEDIFF DATEADD
DATEDIFF: 返回跨两个指定日期的日期边界数和时间边界数
-- 语法:DATEDIFF ( datepart , startdate , enddate ) 用 enddate 减去 startdate -- 注:datepart 指定应在日期的哪一部分计算差额的参数,其日期相减时,只关注边界值,例: SELECT DATEDIFF(YEAR,'2008-12-31','2009-1-1') --返回 1 -- DATEADD : 返回给指定日期加上一个时间间隔后的新 datetime 值。 语法:DATEADD (datepart , number, date ) -- 注: datepart 指定要返回新值的日期的组成部分 -- number 使用来增加 datepart 的值。正数表示增加,负数表示减少,如果是小数则忽略小数部分,且不做四舍五入。
通过 DATEDIFF 和 DATEADD 的一些日期计算
1) 一年的第一天
SELECT DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0) -- 注:首先DATEDIFF(YEAR,0,GETDATE()) --计算当前年份与 1900年相差的年数,然后通过计算1900-1-1加上相差的年数的日期即为当年第一天
2) 一个季的第一天
SELECT DATEADD(Quarter,DATEDIFF(Quarter,0,GETDATE()),0) -- 注:首先DATEDIFF(Quarter,0,GETDATE()) --计算当前月份与 1900年相差的季份数,然后通过计算1900-1-1加上相差的季份数的日期即为当季第一天
3) 一个月的第一天
SELECT DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0) -- 注:首先DATEDIFF(MONTH,0,GETDATE()) --计算当前月份与 1900年相差的月份数,然后通过计算1900-1-1加上相差的月份数的日期即为当月第一天
4) 一周的第一天
SELECT DATEADD(wk,DATEDIFF(wk,0,GETDATE()),0)
5) 当天的半夜 (00:00:00.000)
SELECT DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),0)
6) 上月的最后一天
SELECT DATEADD(ms,-3,DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0)) -- 注:用本月的第一天减去3毫秒,即得出上个月的最有一天.SQL SERVER DATETIME类型的时间精确到3毫秒。
SELECT DATEADD(ms,-3,DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())+1,0))
8) 本月的天数
SELECT DAY(DATEADD(ms,-3,DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())+1,0))) SELECT 32-DAY(GETDATE()+(32-DAY(GETDATE())))
9) 本年的最后一天
SELECT DATEADD(ms,-3,DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE())+1,0))
SELECT DATEADD(DAY,1-DATEPART(weekday,GETDATE()),GETDATE())
11) 一周的最后一天
SELECT DATEADD(DAY,7-DATEPART(WeekDay,GETDATE()),GETDATE()) SELECT DATEADD(weekday,DATEDIFF(weekday,0,DATEADD(DAY,6-DATEPART(day,GETDATE()),GETDATE())),0)
12) 获取近七天每天的日期
select dateadd(day, number, convert(date, dateadd(DD, -(7 - 1), getdate()), 23)) as RQ from master.dbo.spt_values where type = 'P' and number <= DATEDIFF(day, convert(date, dateadd(DD, -(7 - 1), getdate()), 23), GETDATE())

浙公网安备 33010602011771号