SQLServer日期函数的格式化怎么实现
发布时间:2023-12-24 13:54:45 所属栏目:MsSql教程 来源:DaWei
导读: 在这篇文章中,我们来学习一下“SQLServer日期函数的格式化怎么实现,日期操作有哪些”的相关知识,下文有详细的讲解,易于大家学习和理解,有需要的朋友可以借鉴参考,下面就请大
在这篇文章中,我们来学习一下“SQLServer日期函数的格式化怎么实现,日期操作有哪些”的相关知识,下文有详细的讲解,易于大家学习和理解,有需要的朋友可以借鉴参考,下面就请大家跟着小编的思路一起来学习一下吧。 SQL Server发展至今,关于日期的格式的控制方法,有传统的方法,比如CONVERT(),也有比较便利的新方法,比如FORMAT();同样,关于日期的操作函数,也分为传统方法:DATEADD()等,也有便利的新方法:EOMonth()等。 一,日期的格式化 格式化是指把日期类型(Date)、日期和时间类型转化为字符类型,通常使用CONVERT()和FORMAT()函数。 1,传统的CONVERT() SQL Server控制日期的的显示格式,通常使用CONVERT()函数,通过控制style参数来控制日期显示的格式,但是,style很多,不利于记忆。 CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 符合东方人阅读习惯的style及其显示格式如下: 101: mm/dd/yyyy 110: mm-dd-yyyy 111: yyyy/mm/dd 112: yyyymmdd 120: yyyy-mm-dd hh:mm:ss 121: yyyy-mm-dd hh:mm:sssssss CONVERT()函数的style是数字,记忆起来比较困难,并且只能按照系统定义的格式来显示,不够灵活。SQL Server提供更为灵活的转换函数FORMAT()。 2,便利的FORMAT()函数 FORMAT()函数,可以方便和灵活地控制数值、日期和时间类型的显示格式,通常情况下,FORMAT()函数主要用于格式化显示date/time类型和数值类型,参数format用于指定显示的格式,给予用户对格式更自由地控制,culture参数是可选的,用于指定显示的语言,该函数返回值的数据类型是NVARCHAR,如果格式转换失败,该函数返回NULL: FORMAT ( value, format [, culture ] ) 参数format使用#表示一个数值,参数 format 使用以下占位符来表示日期/时间的格式: yyyy、MM、dd:表示年、月、日 hh:mm:ss fffffff:表示时、分、秒、毫秒 使用“/”,“-”等作为连接各个部分(part)的分割符号 (1)把date/time格式化 在format参数中指定日期/时间显示的格式,以特定的格式: “yyyy:MMdd hh:mm:ss fffffff” 显式日期/时间,例如: select format(SYSDATETIME(),'yyyy-MM-dd hh:mm:ss fffffff') (2)转换数值类型 在参数format中使用#代表一个数字,使用相应的连接符,拼接成数字的格式字符,例如: FORMAT(123456789,'###-##-####') AS 'Custom Number Result 二,日期和时间的结构 常用的日期的构成(datepart)是:year、month、day、hour、minute、second、ns、TZoffset(简写为 tz) DATEPART ( datepart , date ) YEAR ( date ) MONTH ( date ) DAY ( date ) 在实际的产品环境中,周、季度等都很有用途: quarter:季度,取值范围是 1、2、3、4 week:周在年中的序数,取值范围是 1 - 53 dayofyear:天在年中的序数,取值范围是 1 - 366 weekday:天在一周中的序数,取值范围是 1 - 7 DATEPART()返回的datepart是int类型,如果想要返回字符类型,可以使用DATENAME()函数: DATENAME ( datepart , date ) 通过datepart来构造日期,常用的函数有: DATEFROMPARTS ( year, month, day ) DATETIME2FROMPARTS ( year, month, day, hour, minute, seconds, fractions, precision ) DATETIMEOFFSETFROMPARTS ( year, month, day, hour, minute, seconds, fractions, hour_offset, minute_offset, precision ) TIMEFROMPARTS ( hour, minute, seconds, fractions, precision ) 参数precision 是指小数秒的精度,指的是DateTime2(n)、DateTimeOffset(n),Time(n)中的n值,表示以多少位小数表示1s。 三,日期操作 日期函数:EOMonth、Format、DateAdd、DateDiff、SwitchOffset 1,月份的最后一天 函数 EOMonth() 返回指定日期的最后一天 EOMONTH ( start_date [, month_to_add ] ) 参数注释: start_date: 有两种输入方式,能够转换为Date的字符串类型 和 date 数据类型 month_to_add: 是int 类型,能够为正整数,负整数和0,默认值是0,如果省略,那么使用默认值0。 例如,查看当前月的最后一天、下一个月的最后一天、上一个月的最后一天: declare @date date set @date=getdate() select EOMONTH(@date) as CurrentMonth_EndDay, EOMONTH(@date,1) as NextMonth_EndDay, EOMONTH(@date,-1) as LastMonth_EndDay 2,月份的第一天 使用DateFromParts() 函数,能够从3个正整数(year,month,day)中获取date 类型,只需要将day 参数设置1,就能获取月份的第一天的日期。 declare @date date set @date=getdate() select DATEFROMPARTS(year(@date),month(@date),1) 也可以使用Format() 函数, 以字符串形式返回月份的第一天,例如,获取当前月份的第一天: FORMAT(GETDATE(),'yyyyMM01') 3,切换时区 把DateTimeOffset类型的数据切换到指定的时区,在转换过程中,UTC时间是固定的,依据固定的UTC时间,切换到特定时区的本地时间: SWITCHOFFSET ( DATETIMEOFFSET, time_zone ) 参数注释: DATETIMEOFFSET:DateTimeOffset(n)类型的变量 time_zone:指定的目标时区数据,格式是 [+|-] hh:mm 使用SwitchOffset()函数把DateTimeOffset的时区偏移(Offset)切换到指定的时区中,例如,把本地时间的时区东八区切换到东七区: DECLARE @remote DATETIMEOFFSET DECLARE @local DATETIMEOFFSET SET @local = SYSDATETIMEOFFSET() SET @remote = SWITCHOFFSET (@local, '+07:00') SELECT @remote AS remote_time,@local AS local_time 可以看到,东7区的时间比东8区的时间晚一个小时。 4,当前日期是周几 在SQL Server中,通过DataFirst选项设置一周的第一天,序数是从1到7,表示一周的7天。 SET DATEFIRST { number | @number_var } (1)可以通过@@datefirst来获取设置的值 set DATEFIRST 1 select @@datefirst (2)使用函数datepart函数获取当天是周几 set DATEFIRST 1 select datepart(WEEKDAY,getutcdate()) set DATEFIRST 2 --select @@datefirst select datepart(WEEKDAY,getutcdate()) 由于设置不同的DateFirst,会导致datepart返回不同的数值,所以必须借助@@DateFirst set DATEFIRST 2 select Datepart(weekday, getdate()+@@datefirst - 1) set DATEFIRST 1 select Datepart(weekday, getdate()+@@datefirst - 1) 4,使用DateName获取WeekDay的名字 WeekDay的名字跟系统的语言设置有管,跟DateFirst的设置没有关系 (1) 查看当前的语言设置 select @@language (2) 查看系统支持的语言 select alias,name, * from sys.syslanguages (3) 设置语言 set LANGUAGE 'Simplified Chinese' set LANGUAGE 'us_english' (4) 使用DateName获取WeekDay的名字 set LANGUAGE 'Simplified Chinese' select DATENAME(WEEKDAY,getutcdate()) set LANGUAGE 'us_english' select DATENAME(WEEKDAY,getutcdate()) 四. 日期函数 sqlserver_时间格式化_年月日 函数名称 参数 示例 说明 dateadd(日期部分,数字,日期) select dateadd(year,45,'1990-12-11') 返回 2035-12-11 00:00:00.000 select dateadd(month,45,'1990-12-11') 返回 1994-09-11 00:00:00.000 select dateadd(mm,45,'1990-12-11') 返回 1994-09-11 00:00:00.000 select dateadd(qq,12,'1990-12-11') 返回 1993-12-11 00:00:00.000 select dateadd(hh,12,'1990-12-11') 返回 1990-12-11 12:00:00.000 select dateadd(yy,-12,'1990-12-11') 返回 1978-12-11 00:00:00.000 返回给指定日期加上一个时间间隔后的新的日期值。 数字:用于与指定的日期部分相加的值。如果指定了非整数值,则将舍弃该值的小数部分,舍弃时不遵循四舍五入。 日期:指定的原日期 在此函数中 :dw,dy,dd 效果一样都表示天 datediff(日期部分,开始日期,结束日期) select datediff(yy,'1990-12-11','2008-9-10') 返回 18 selectdatediff(mm,'2007-12-11','2008-9-10') 返回 9 返回两个指定日期的指定日期部分的差的整数值。 在此函数中dw,dy,dd 效果一样都表示天 datename(日期部分,日期) select datename(mm,'2007-12-11') 返回 12 select datename(dw,'2007-12-11') 返回星期二 select datename(dd, ‘2007-12-11') 返回 11 select datename(wk, ‘2007-12-11') – 50 一年中的第几个星期 select datename(dy, ‘2007-12-11') – 345 一年中的第几天 select DATENAME(YYYY,GETDATE()) + DATENAME(MM,GETDATE()) – 201803 返回表示指定日期的指定日期部分的字符串。 dw 表示一星期中星期几 wk 表示一年中的第几个星期 dy 表示一年中的第几天 datepart(日期部分,日期) select datepart(mm,'2007-12-11')返回 12 select datepart(dw,'2007-12-11')返回 3 select datepart(dd, ‘2007-12-11')返回 11 select DATEPART(YYYY,GETDATE()) + DATENAME(MM,GETDATE()) – 2021 返回表示指定日期的指定日期部分的整数。 wk 表示一年中的第几个星期 dy 表示一年中的第几天, dw 表示一星期中星期几,返回整数默认 1 为星期天 getdate()无参数 select getdate() 返回 2222-02-22 12:34:19.070 返回当前系统日期和时间。 getutcdate()无参数 select getutcdate() 返回2222-02-22 04:34:19.073 返回表示当前的UTC(世界标准时间)时间。即格林尼治时间(GMT) 1、上月的第一天 SELECT CONVERT(CHAR(10),DATEADD(month,-1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),111) 2、上月的最后一天 SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()),0)),111)+' 23:59:59' 3、本月的第一天 SELECT CONVERT(CHAR(10),DATEADD(dd,-DAY(GETDATE())+1,GETDATE()),111) 4、本月的最后一天 SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0)),111)+' 23:59:59' 5、来月的最后第一天 SELECT CONVERT(CHAR(10),DATEADD(m,1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),111) 6、来月的最后一天 SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+2,0)),111)+' 23:59:59' 日期部分 含义 : 缩写year年yy,yyyy quarter季qq,q month月mm, m dayofyear天(请看函数中的说明)dy, y day天(请看函数中的说明)dd, d week星期wk, ww weekday天(请看函数中的说明)dw, w hour小时hh minute分钟mi, n second秒ss, s millisecond毫秒ms 以上就是关于“SQLServer日期函数的格式化怎么实现,日期操作有哪些”的介绍了,感谢各位的阅读,希望这篇文章能帮助大家解决问题。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐