Sql Server的DateTime相关

计录,非原创

 

1.一个月第一天的
Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

2.本周的星期一
Select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

3.一年的第一天
Select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

4.季度的第一天
Select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

5.当天的半夜
Select DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)

6.上个月的最后一天
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

7.去年的最后一天
Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))

8.本月的最后一天
Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))

9.本年的最后一天
Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))

10.本月的第一个星期一
select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)

 

在本文中,GetDate()获得的日期由两部分组成,分别是今天的日期和当时的时间: Select GetDate()  用DateName()就可以获得相应的年、月、日,然后再把它们连接起来就可以了:

Select Datename(year,GetDate())+'-'+Datename (month,GetDate())+'-'+Datename(day,GetDate())

另外,DateName()还可以获得到小时、时间、秒、星期几、第几周,分别如下:

Select Datename(hour,GetDate()) Select Datename(minute,GetDate()) Select Datename(second,GetDate()) Select Datename(weekDay,GetDate()) Select Datename(week,GetDate())

SQL中的日期类型DateTime的默认格式就是yyyy-mm-dd hh:mi:ss: mmm,可大多数的情况我们只想得到他的日期部分,而不许要后面的时间。上一篇中提到用Datename()函数来截取拼接出不包含时间部分的日期,现在再说一种方法,更加简单的获取到不包含时间的日期

Convert函数转换字符串

set nocount on;

      SELECT 'CONVERT(varchar(100), GETDATE(), 0)    'T_Sql,    CONVERT(varchar(100), GETDATE(), 0)     ConvertResult           --01 16 2021 11:16AM
union SELECT 'CONVERT(varchar(100), GETDATE(), 1)   ',        CONVERT(varchar(100), GETDATE(), 1)                         --01/16/21
union SELECT 'CONVERT(varchar(100), GETDATE(), 2)    ',        CONVERT(varchar(100), GETDATE(), 2)                           --01-16-21
union SELECT 'CONVERT(varchar(100), GETDATE(), 3)    ',        CONVERT(varchar(100), GETDATE(), 3)                           --01 16 2021 11:16AM
union SELECT 'CONVERT(varchar(100), GETDATE(), 4)    ',        CONVERT(varchar(100), GETDATE(), 4)                           --01/16/2021
union SELECT 'CONVERT(varchar(100), GETDATE(), 5)    ',        CONVERT(varchar(100), GETDATE(), 5)                           --2021.01.16
union SELECT 'CONVERT(varchar(100), GETDATE(), 6)    ',        CONVERT(varchar(100), GETDATE(), 6)                           --16/01/2021
union SELECT 'CONVERT(varchar(100), GETDATE(), 7)    ',        CONVERT(varchar(100), GETDATE(), 7)                           --16.01.2021
union SELECT 'CONVERT(varchar(100), GETDATE(), 8)    ',        CONVERT(varchar(100), GETDATE(), 8)                           --16-01-2021
union SELECT 'CONVERT(varchar(100), GETDATE(), 9)    ',        CONVERT(varchar(100), GETDATE(), 9)                           --16 01 2021
union SELECT 'CONVERT(varchar(100), GETDATE(), 10) ' ,        CONVERT(varchar(100), GETDATE(), 10)                        --01 16, 2021
union SELECT 'CONVERT(varchar(100), GETDATE(), 11) ' ,        CONVERT(varchar(100), GETDATE(), 11)                        --11:16:27
union SELECT 'CONVERT(varchar(100), GETDATE(), 12) ' ,        CONVERT(varchar(100), GETDATE(), 12)                        --01 16 2021 11:16:27:507AM
union SELECT 'CONVERT(varchar(100), GETDATE(), 13) ' ,        CONVERT(varchar(100), GETDATE(), 13)                        --21/01/16
union SELECT 'CONVERT(varchar(100), GETDATE(), 14) ' ,        CONVERT(varchar(100), GETDATE(), 14)                        --01-16-2021
union SELECT 'CONVERT(varchar(100), GETDATE(), 20) ' ,        CONVERT(varchar(100), GETDATE(), 20)                        --2021/01/16
union SELECT 'CONVERT(varchar(100), GETDATE(), 21) ' ,        CONVERT(varchar(100), GETDATE(), 21)                        --20210116
union SELECT 'CONVERT(varchar(100), GETDATE(), 22) ' ,        CONVERT(varchar(100), GETDATE(), 22)                        --16 01 2021 11:16:27:507
union SELECT 'CONVERT(varchar(100), GETDATE(), 23) ' ,        CONVERT(varchar(100), GETDATE(), 23)                        --11:16:27:507
union SELECT 'CONVERT(varchar(100), GETDATE(), 24) ' ,        CONVERT(varchar(100), GETDATE(), 24)                        --210116
union SELECT 'CONVERT(varchar(100), GETDATE(), 25) ' ,        CONVERT(varchar(100), GETDATE(), 25)                        --2021-01-16 11:16:27
union SELECT 'CONVERT(varchar(100), GETDATE(), 100)' ,        CONVERT(varchar(100), GETDATE(), 100)                       --2021-01-16 11:16:27.507
union SELECT 'CONVERT(varchar(100), GETDATE(), 101)' ,        CONVERT(varchar(100), GETDATE(), 101)                       --2021-01-16T11:16:27.507
union SELECT 'CONVERT(varchar(100), GETDATE(), 102)' ,        CONVERT(varchar(100), GETDATE(), 102)                       --16 01 2021 11:16:27:507
union SELECT 'CONVERT(varchar(100), GETDATE(), 103)' ,        CONVERT(varchar(100), GETDATE(), 103)                       -- 3 ????? ??????? 1442 11:16:27:507AM
union SELECT 'CONVERT(varchar(100), GETDATE(), 104)' ,        CONVERT(varchar(100), GETDATE(), 104)                       -- 3/06/1442 11:16:27:507AM
union SELECT 'CONVERT(varchar(100), GETDATE(), 105)' ,        CONVERT(varchar(100), GETDATE(), 105)                       --11:16:27:507
union SELECT 'CONVERT(varchar(100), GETDATE(), 106)' ,        CONVERT(varchar(100), GETDATE(), 106)                       --21.01.16
union SELECT 'CONVERT(varchar(100), GETDATE(), 107)' ,        CONVERT(varchar(100), GETDATE(), 107)                       --2021-01-16 11:16:27
union SELECT 'CONVERT(varchar(100), GETDATE(), 108)' ,        CONVERT(varchar(100), GETDATE(), 108)                       --2021-01-16 11:16:27.507
union SELECT 'CONVERT(varchar(100), GETDATE(), 109)' ,        CONVERT(varchar(100), GETDATE(), 109)                       --01/16/21 11:16:27 AM
union SELECT 'CONVERT(varchar(100), GETDATE(), 110)' ,        CONVERT(varchar(100), GETDATE(), 110)                       --2021-01-16
union SELECT 'CONVERT(varchar(100), GETDATE(), 111)' ,        CONVERT(varchar(100), GETDATE(), 111)                       --11:16:27
union SELECT 'CONVERT(varchar(100), GETDATE(), 112)' ,        CONVERT(varchar(100), GETDATE(), 112)                       --2021-01-16 11:16:27.507
union SELECT 'CONVERT(varchar(100), GETDATE(), 113)' ,        CONVERT(varchar(100), GETDATE(), 113)                       --16/01/21
union SELECT 'CONVERT(varchar(100), GETDATE(), 114)' ,        CONVERT(varchar(100), GETDATE(), 114)                       --16.01.21
union SELECT 'CONVERT(varchar(100), GETDATE(), 120)' ,        CONVERT(varchar(100), GETDATE(), 120)                       --16-01-21
union SELECT 'CONVERT(varchar(100), GETDATE(), 121)' ,        CONVERT(varchar(100), GETDATE(), 121)                       --16 01 21
union SELECT 'CONVERT(varchar(100), GETDATE(), 126)' ,        CONVERT(varchar(100), GETDATE(), 126)                       --01 16, 21
union SELECT 'CONVERT(varchar(100), GETDATE(), 130)' ,        CONVERT(varchar(100), GETDATE(), 130)                       --11:16:27
union SELECT 'CONVERT(varchar(100), GETDATE(), 131)' ,        CONVERT(varchar(100), GETDATE(), 131)                       --01 16 2021 11:16:27:507AM

set nocount off

varchar转换DateTIme回去,根据格式,比如 '01 16 2021 11:16AM'对应   --SELECT 'CONVERT(varchar(100), GETDATE(), 0) 'T_Sql, CONVERT(varchar(100), GETDATE(), 0) ConvertResult --01 16 2021 11:16AM

declare @DateSt varchar(100) = '01 16 2021 11:16AM'
declare @Date datetime= CONVERT(datetime,@DateSt,0)
select @Date [Date],DATENAME(YY,@Date)Y,DATENAME(MM,@Date)M,DATENAME(DD,@Date)D
--1. Style=101时,表示日期字符串为:mm/dd/yyyy格式 SELECT CONVERT(datetime,'11/1/2003',101) --结果:2003-11-01 00:00:00.000
--2. Style=101时,表示日期字符串为:dd/mm/yyyy格式 SELECT CONVERT(datetime,'11/1/2003',103) --结果:2003-01-11 00:00:00.000
 

/*== 日期转换为字符串 ==*/ DECLARE @dt datetime SET @dt='2003-1-11'
--1. Style=101时,表示将日期转换为:mm/dd/yyyy 格式 SELECT CONVERT(varchar,@dt,101) --结果:01/11/2003
--2. Style=103时,表示将日期转换为:dd/mm/yyyy 格式 SELECT CONVERT(varchar,@dt,103) --结果:11/01/2003

/*== 这是很多人经常犯的错误,对非日期型转换使用日期的style样式 ==*/ SELECT CONVERT(varchar,'2003-1-11',101) --结果:2003-1-11
--1. /*--说明 SET DATEFORMAT设置对使用CONVERT把字符型日期转换为日期的处理也具有影响 但不影响明确指定了style的CONVERT处理。 --*/
--示例 ,在下面的示例中,第一个CONVERT转换未指定style,转换的结果受SET DATAFORMAT的影响,第二个CONVERT转换指定了style,转换结果受style的影响。 --设置输入日期顺序为 日/月/年 SET DATEFORMAT DMY
--不指定Style参数的CONVERT转换将受到SET DATEFORMAT的影响 SELECT CONVERT(datetime,'2-1-2005') --结果: 2005-01-02 00:00:00.000
--指定Style参数的CONVERT转换不受SET DATEFORMAT的影响 SELECT CONVERT(datetime,'2-1-2005',101) --结果: 2005-02-01 00:00:00.000 GO
--2. /*--说明
--如果输入的日期包含了世纪部分,则对日期进行解释处理时 年份的解释不受SET DATEFORMAT设置的影响。 --*/
--示例,在下面的代码中,同样的SET DATEFORMAT设置,输入日期的世纪部分与不输入日期的世纪部分,解释的日期结果不同。 DECLARE @dt datetime
--设置SET DATEFORMAT为:月日年 SET DATEFORMAT MDY
--输入的日期中指定世纪部分 SET @dt='01-2002-03' SELECT @dt --结果: 2002-01-03 00:00:00.000
--输入的日期中不指定世纪部分 SET @dt='01-02-03' SELECT @dt --结果: 2003-01-02 00:00:00.000 GO
--3. /*--说明
--如果输入的日期不包含日期分隔符,那么SQL Server在对日期进行解释时 将忽略SET DATEFORMAT的设置。 --*/
--示例,在下面的代码中,不包含日期分隔符的字符日期,在不同的SET DATEFORMAT设置下,其解释的结果是一样的。 DECLARE @dt datetime
--设置SET DATEFORMAT为:月日年 SET DATEFORMAT MDY SET @dt='010203' SELECT @dt --结果: 2001-02-03 00:00:00.000
--设置SET DATEFORMAT为:日月年 SET DATEFORMAT DMY SET @dt='010203' SELECT @dt --结果: 2001-02-03 00:00:00.000
--输入的日期中包含日期分隔符 SET @dt='01-02-03' SELECT @dt --结果: 2003-02-01 00:00:00.000
--以下示例演示了在不同的语言环境(SET LANGUAGE)下,DATENAME与CONVERT函数的不同结果。 USE master
--设置会话的语言环境为: English SET LANGUAGE N'English' SELECT DATENAME(Month,GETDATE()) AS [Month], DATENAME(Weekday,GETDATE()) AS [Weekday], CONVERT(varchar,GETDATE(),109) AS [CONVERT] /*--结果: Month    Weekday   CONVERT ------------- -------------- ------------------------------- March    Tuesday   Mar 15 2005 8:59PM --*/
--设置会话的语言环境为: 简体中文 SET LANGUAGE N'简体中文' SELECT DATENAME(Month,GETDATE()) AS [Month], DATENAME(Weekday,GETDATE()) AS [Weekday], CONVERT(varchar,GETDATE(),109) AS [CONVERT] /*--结果 Month    Weekday    CONVERT

 

上一篇:Compress, Resize then Convert Image to DataUri in Power Automate


下一篇:windows如何打开.key keynote文件