SQL Server 日期函数:EOMonth、DateFormat、Format、DatePart、DateName
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())
参考文档:
Date and Time Data Types and Functions (Transact-SQL)
SQL Server 日期函数:EOMonth、DateFormat、Format、DatePart、DateName的更多相关文章
- 四个很好用的Sql Server 日期函数:DateDiff、DatePart、DateAdd、DateName
我以前查一段时间范围内的数据都是在程序里计算好日期再掉查询语句,现在我用下面的函数.SQL SERVER没有查一季度数据的函数. DateDiff函数: 描述 返回两个日期之间的时间间隔. 语法 Da ...
- SQL Server日期函数总结
获得一个月的天数:首先到得一个月最后一天的日期,通过 SQL Server 日期函数 day() 取得日期中的“天 ”部分 获得 2008 年 2 月份的天数:select day(cast('200 ...
- SQL Server日期函数之获得一个月中的天数
SQL Server日期函数之获得一个月中的天数在实际中的应用比例还是占为多数的,如果你对这一技术,心存好奇的话,以下的文章将会揭开它的神秘面纱,望会在以后的学习或是工作中带来很大的帮助. 获得一个月 ...
- SQL Server 日期函数:某天是星期几?
[鹏城万里] 发表于 www.sqlstudy.com 要得到某一天是星期几,需要用到 SQL Server 中的日期函数:datename(). 今天是星期几,例子 1: set language ...
- Sql server 日期函数和日期转换
时间函数 SQL Server Date 函数 下面的表格列出了 SQL Server 中最重要的内建日期函数: 函数 描述 GETDATE() 返回当前日期和时间 DATEPART(Type,dat ...
- sql server 日期函数
一.sql server日期时间函数Sql Server中的日期与时间函数 1. 当前系统日期.时间 select getdate() 2. dateadd 在向指定日期加上一段时间的基 ...
- SQL Server 日期函数大全
一.统计语句 1.--统计当前[>当天00点以后的数据] SELECT * FROM 表 WHERE CONVERT(Nvarchar, dateandtime, 111) = CONVERT( ...
- Sql server日期函数用法
SQL日期函数 SQL日期函数中的类型码可以为0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 ,20,21,22,23,24,25,100,101,102,103,104,105 ...
- Sql server日期函数操作
1.获取前一小时内的数据:DATEADD(HOUR,-1,GETDATE()),将"HOUR"替换成DAY,Month,YEAR就是前一天,前一月,前一年 2.获取日期部分,格式为 ...
随机推荐
- 【统计学习】SVM之超平面方程来源
摘要 本文主要说明SVM中用到的超平面方程是怎么来的,以及各个符号的物理意义,怎么算空间上某点到该平面的距离. 正文 < 统计学习方法>一书给出如下说明: 首先说明我对超平面的理解: 在三 ...
- HDU5509 : Pattern String
只要求出两个字符串的最小表示,然后就可以判断是否循环同构. 枚举最小表示的开头在哪个位置,然后求出Hash值,如果两个串的Hash值集合有交,那么说明循环同构. 因为串经过压缩,原串的长度很大,不能直 ...
- 微信小程序火车票查询 直取12306数据
最终效果图: 样式丑哭了,我毕竟不是前端,宗旨就是练练手,体验微信小程序的开发,以最直接的方式获取12306数据查询火车票. 目录结构: search1是出发站列表,search2是目的站列表,命名没 ...
- 【验证】C# dataSource 的记忆功能
做项目时遇到的问题:dataSource被ComboBox引用过一次,会记忆最后一次选中的值,然后下一次再用时这个值会直接呈现在ComboBox中. 为验证是dataSource还是ComboBox自 ...
- iOS 遇到的错误总结
1.[[[NSBundle mainBundle] loadNibNamed:@"UIFeedbackController" owner:nil options:nil] firs ...
- dvb标准
一.概念 DVB, 数字视频广播Digital Video Broadcasting的缩写, 是由DVB项目维护的一系列国际承认的数字电视公开标准.(欧标)二.分类DVB系统传输方式有如下几种: 卫星 ...
- Python 爬虫3——第一个爬虫脚本的创建
在进行真正的爬虫工程创建之前,我们先要明确我们所要操作的对象是什么?完成所有操作之后要获取到的数据或信息是什么? 首先是第一个问题:操作对象,爬虫全称是网络爬虫,顾名思义,它所操作的对象当然就是网页, ...
- [ios]关于用FMDB 操作数据库 删除 tableView 后刷新
刚了解使用fmdb,从数据库获取数据 绑定到一个可变数组classNameItems //从ClassList表取得数据 FMResultSet *classInfo=[db executeQuery ...
- 定时任务crontab 例子
查看定时任务格式 [root@centos ~]# vim /etc/crontab 1 SHELL=/bin/bash 2 PATH=/sbin:/bin:/usr/sbin:/usr/bin 3 ...
- jquery/zepto 圣诞节雪花飞扬
下载地址: http://www.html5tricks.com/jquery-html5-christ-snow.html 演示地址: http://www.html5tricks.com/jque ...