T-SQL日期相關(guān)
1、日期格式化處理
DECLARE @dt datetime SET @dt=GETDATE()
--1.短日期格式:yyyy-m-d SELECT REPLACE(CONVERT(varchar(10),@dt,120),N'-0','-')
--2.長日期格式:yyyy年mm月dd日 --A. 方法1 SELECT STUFF(STUFF(CONVERT(char(8),@dt,112),5,0,N'年'),8,0,N'月')+N'日' --B. 方法2 SELECT DATENAME(Year,@dt)+N'年'+DATENAME(Month,@dt)+N'月'+DATENAME(Day,@dt)+N'日'
--3.長日期格式:yyyy年m月d日 SELECT DATENAME(Year,@dt)+N'年'+CAST(DATEPART(Month,@dt) AS varchar)+N'月'+DATENAME(Day,@dt)+N'日'
--4.完整日期+時間格式:yyyy-mm-dd hh:mi:ss:mmm SELECT CONVERT(char(11),@dt,120)+CONVERT(char(12),@dt,114)
2、日期推算處理
DECLARE @dt datetime SET @dt=GETDATE()
DECLARE @number int SET @number=3
--1.指定日期該年的第一天或最后一天 --A. 年的第一天 SELECT CONVERT(char(5),@dt,120)+'1-1'
--B. 年的最后一天 SELECT CONVERT(char(5),@dt,120)+'12-31'
--2.指定日期所在季度的第一天或最后一天 --A. 季度的第一天 SELECT CONVERT(datetime, CONVERT(char(8), DATEADD(Month, DATEPART(Quarter,@dt)*3-Month(@dt)-2, @dt), 120)+'1')
--B. 季度的最后一天(CASE判斷法) SELECT CONVERT(datetime, CONVERT(char(8), DATEADD(Month, DATEPART(Quarter,@dt)*3-Month(@dt), @dt), 120) +CASE WHEN DATEPART(Quarter,@dt) in(1,4) THEN '31'ELSE '30' END)
--C. 季度的最后一天(直接推算法) SELECT DATEADD(Day,-1, CONVERT(char(8), DATEADD(Month, 1+DATEPART(Quarter,@dt)*3-Month(@dt), @dt), 120)+'1')
--3.指定日期所在月份的第一天或最后一天 --A. 月的第一天 SELECT CONVERT(datetime,CONVERT(char(8),@dt,120)+'1')
--B. 月的最后一天 SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+'1')
--C. 月的最后一天(容易使用的錯誤方法) SELECT DATEADD(Month,1,DATEADD(Day,-DAY(@dt),@dt))
--4.指定日期所在周的任意一天 SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)
--5.指定日期所在周的任意星期幾 --A. 星期天做為一周的第1天 SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)
--B. 星期一做為一周的第1天 SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)
////////////////////////////////////////////////////////////////////////////////////////////////////
1. 當(dāng)前系統(tǒng)日期、時間 select getdate()
2. dateadd 在向指定日期加上一段時間的基礎(chǔ)上,返回新的 datetime 值 例如:向日期加上2天 select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000
3. datediff 返回跨兩個指定日期的日期和時間邊界數(shù)。 select datediff(day,'2004-09-01','2004-09-18') --返回:17
4. datepart 返回代表指定日期的指定日期部分的整數(shù)。 select datepart(month, '2004-10-15') --返回 10
5. datename 返回代表指定日期的指定日期部分的字符串 select datename(weekday, '2004-10-15') --返回:星期五
6. day(), month(),year() --可以與datepart對照一下
select 當(dāng)前日期=convert(varchar(10),getdate(),120),
當(dāng)前時間=convert(varchar(8),getdate(),114)
select datename(dw,'2004-10-15')
select 本年第多少周=datename(week,'2004-10-15'),
今天是周幾=datename(weekday,'2004-10-15')
函數(shù) |
參數(shù)/功能 |
GetDate( ) |
返回系統(tǒng)目前的日期與時間 |
DateDiff (interval,date1,date2) |
以interval 指定的方式,返回date2 與date1兩個日期之間的差值 date2-date1 |
DateAdd (interval,number,date) |
以interval指定的方式,加上number之后的日期 |
DatePart (interval,date) |
返回日期date中,interval指定部分所對應(yīng)的整數(shù)值 |
DateName (interval,date) |
返回日期date中,interval指定部分所對應(yīng)的字符串名稱 |
參數(shù) interval的設(shè)定值如下:
值 |
縮 寫(Sql Server) |
(Access 和 ASP) |
說明 |
Year |
Yy |
yyyy |
年 1753 ~ 9999 |
Quarter |
Qq |
q |
季 1 ~ 4 |
Month |
Mm |
m |
月1 ~ 12 |
Day of year |
Dy |
y |
一年的日數(shù),一年中的第幾日 1-366 |
Day |
Dd |
d |
日,1-31 |
Weekday |
Dw |
w |
一周的日數(shù),一周中的第幾日 1-7 |
Week |
Wk |
ww |
周,一年中的第幾周 0 ~ 51 |
Hour |
Hh |
h |
時0 ~ 23 |
Minute |
Mi |
n |
分鐘0 ~ 59 |
Second |
Ss |
s |
秒 0 ~ 59 |
Millisecond |
Ms |
- |
毫秒 0 ~ 999
|
SQL Server中文版的默認(rèn)的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm
例如:
select getdate()
2004-09-12 11:06:08.177
整理了一下SQL Server里面可能經(jīng)常會用到的日期格式轉(zhuǎn)換方法:
舉例如下:
select CONVERT(varchar, getdate(), 120 )
2004-09-12 11:06:08
select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')
20040912110608
select CONVERT(varchar(12) , getdate(), 111 )
2004/09/12
select CONVERT(varchar(12) , getdate(), 112 )
20040912
select CONVERT(varchar(12) , getdate(), 102 )
2004.09.12
select CONVERT(varchar(12) , getdate(), 101 )
09/12/2004
select CONVERT(varchar(12) , getdate(), 103 )
12/09/2004
select CONVERT(varchar(12) , getdate(), 104 )
12.09.2004
select CONVERT(varchar(12) , getdate(), 105 )
12-09-2004
select CONVERT(varchar(12) , getdate(), 106 )
12 09 2004
select CONVERT(varchar(12) , getdate(), 107 )
09 12, 2004
select CONVERT(varchar(12) , getdate(), 108 )
11:06:08
select CONVERT(varchar(12) , getdate(), 109 )
09 12 2004 1
select CONVERT(varchar(12) , getdate(), 110 )
09-12-2004
select CONVERT(varchar(12) , getdate(), 113 )
12 09 2004 1
select CONVERT(varchar(12) , getdate(), 114 )
11:06:08.177
|