ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Sql Server的DateTime相关

2021-01-16 11:36:43  阅读:239  来源: 互联网

标签:CONVERT varchar -- Server Sql 100 DateTime SELECT GETDATE


计录,非原创

 

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

 

标签:CONVERT,varchar,--,Server,Sql,100,DateTime,SELECT,GETDATE
来源: https://www.cnblogs.com/wandia/p/14285311.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有