(MSSQL)datetime處理

 

現在時間

1
SELECT GETDATE()

取得現在年、月、日

1
2
3
SELECT YEAR(GETDATE())
SELECT MONTH(GETDATE())
SELECT DAY(GETDATE())

DATEPART

DatepartDescription
year, yyyy, yy年
month, mm, m月
day, dd, d日
hour, hh時
minute, n分
second, ss, s秒
millisecond, ms毫秒
microsecond, mcs微秒
nanosecond, ns毫微秒
quarter, qq, q季
dayofyear, dy, y一年中的第幾天
week, wk, ww一年中的第幾週
weekday, dw星期幾
TZoffset, tz時區 time zone offset,單位是分鐘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT DATEPART(yy,'2010-10-30 12:20:30')
-- 2010
SELECT DATEPART(m,'2010-10-30 12:20:30')
-- 10
SELECT DATEPART(d,'2010-10-30 12:20:30')
-- 30
SELECT DATEPART(hh,'2010-10-30 12:20:30')
-- 12
SELECT DATEPART(mi,'2010-10-30 12:20:30')
-- 20
SELECT DATEPART(ww,'2010-10-30 12:20:30')
-- 44
SELECT DATEPART(q,'2010-10-30 12:20:30')
-- 4

-- 注意,y不是年,是一年中的第幾天
SELECT DATEPART(y,'2010-10-30 12:20:30')
-- 303

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT convert(varchar, getdate(), 100) - mon dd yyyy hh:mmAM (or PM)
SELECT convert(varchar, getdate(), 101) - mm/dd/yyyy
SELECT convert(varchar, getdate(), 102) - yyyy.mm.dd
SELECT convert(varchar, getdate(), 103) - dd/mm/yyyy
SELECT convert(varchar, getdate(), 104) - dd.mm.yyyy
SELECT convert(varchar, getdate(), 105) - dd-mm-yyyy
SELECT convert(varchar, getdate(), 106) - dd mon yyyy
SELECT convert(varchar, getdate(), 107) - mon dd, yyyy
SELECT convert(varchar, getdate(), 108) - hh:mm:ss
SELECT convert(varchar, getdate(), 109) - mon dd yyyy hh:mm:ss:mmmAM (or PM)
SELECT convert(varchar, getdate(), 110) - mm-dd-yyyy
SELECT convert(varchar, getdate(), 111) - yyyy/mm/dd
SELECT convert(varchar, getdate(), 112) - yyyymmdd
SELECT convert(varchar, getdate(), 113) - dd mon yyyy hh:mm:ss:mmm
SELECT convert(varchar, getdate(), 114) - hh:mm:ss:mmm(24h)
SELECT convert(varchar, getdate(), 120) - yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar, getdate(), 121) - yyyy-mm-dd hh:mm:ss.mmm
SELECT convert(varchar, getdate(), 126) - yyyy-mm-ddThh:mm:ss.mmm
SELECT replace(convert(varchar, getdate(), 111), -/-, - -) - yyyy mm dd
SELECT convert(varchar(7), getdate(), 126) - yyyy-mm
SELECT right(convert(varchar, getdate(), 106), 8) - mon yyyy
SELECT format(getdate(),'yyyyMMddHHmmssffff') -- 2014-04-17 13:55:12 => 20140417135512

DATEDIFF

DATEDIFF Syntax

DATEDIFF是計算兩個日期間的間隔,傳回帶正負號的整數.

1
DATEDIFF(datepart, startdate, enddate)

datepart:startdate 和 enddate 之間差異的單位。datepart值不能在變數中指定,也不能是以引號括住的字串 (例如 'month')。
startdate:開始日期
enddate:結束日期

datepart Arguments

datepart namedatepart 縮寫
yearyy, yyyy
quarterqq, q
monthmm, m
dayofyeardy
daydd, d
weekwk, ww
hourhh
minutemi, n
secondss, s
millisecondms
microsecondmcs
nanosecondns

startdate/enddate 可解析格式

  • date
  • datetime
  • datetimeoffset
  • datetime2
  • smalldatetime
  • time

DATEADD

DATEADD會將 數值 (帶正負號的整數) 加入輸入日期的datepart,並傳回修改的日期/時間值。

DATEADD Syntax

1
DATEADD (datepart , number , date )

datepart:startdate 和 enddate 之間差異的單位
number:指定的數值(帶正負號的整數)
date:要被加上的原始日期

datepart arguments

同 DATEDIFF arguments

date 可解析格式

同 DATEDIFF startdate/enddate 可解析格式

DATEADD/DATEDIFF綜合應用

Last Day of Previous Month

1
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)) AS LastDay_PreviousMonth

Last Day of Current Month

1
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)) AS LastDay_CurrentMonth

Last Day of Next Month

1
SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0)) AS LastDay_NextMonth