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毫秒。
7) 本月的最后一天
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))
10) 一周的第一天
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())

 

posted @ 2021-08-07 18:13  iHey  阅读(334)  评论(0)    收藏  举报