目录

SQL Server的日期函数简介

用于获取当前日期和时间的函数

GETDATE

获取日期部分的函数

DATENAME

DATEPART

修改和查找日期差异

DATEDIFF

DATEADD


SQL Server的日期函数为您提供了一组可用于操作日期的函数。该函数用于各种操作,例如向日期添加周数,计算两个日期之间的差异,或将日期分解为其基本部分。

本文的所有示例均基于Microsoft SQL Server Management Studio和AdventureWorks2012数据库。

SQL Server的日期函数简介

在SQL服务器中有超过二十五种不同的函数被归类为日期函数。

所有函数都列在日期函数(Transact-SQL)页面上。我建议访问该页面以了解每个函数。

我们将重点关注我在商业中常用的函数,而不是重复这些内容。

在下表中,我将函数和颜色编码分类。颜色代码对应于您在业务环境中使用该特定函数的可能性。绿色最有可能被使用,红色更少。

这不是一个严格的规模,并且所有函数在某些商业案例中都有用,但我想要一种方法来帮助您筛选出于那些最相关的领域。

这是我的尝试:

DateTime函数——最常见的是绿色

用于获取当前日期和时间的函数

在用于返回当前日期和时间的所有函数中,GETDATE函数是最常用的函数。

GETDATE

GETDATE函数用于返回服务器的当前数据和时间。当您需要将上次付款日期等数据与当前日期进行比较时,此函数会变得非常方便。

GETDATE函数的一般形式是

GETDATE()

这是一个使用GETDATE的例子

SELECT GETDATE()

返回2015-08-09 21:55:00.477

更有用的实例是使用GETDATE与DATEDIFF或DATEADD。查看DATEDIFF更全面的示例。

获取日期部分的函数

日期部分是指日期的各个组成部分,例如年,月或日。日期部分用于本节中的多个函数和其他函数。下面是一个日期部分表,可以在函数中使用,如DATENAME,DATEPART,DATEDIFF,和DATEADD。

日期部分值

这些名字非常明显。每个日期部分对应于众所周知的时期,例如月份或小时。

DATENAME

DATENAME是一个非常有用的函数,用于返回日期的各个部分,例如月份名称或对应于特定日期的星期几。

DATENAME的一般形式是

DATENAME(date part, value)

其中日期部分对应于预定义部分的列表,是您使用的日期。

此函数返回一个字符值。

以下是一个显示各种日期部分的示例。

SELECT DATENAME(year, GETDATE()) as Year,DATENAME(week, GETDATE()) as Week,DATENAME(dayofyear, GETDATE()) as DayOfYear,DATENAME(month, GETDATE()) as Month,DATENAME(day, GETDATE()) as Day,DATENAME(weekday, GETDATE()) as WEEKDAY

假设GETDATE返回2015-08-10 12:56:25.313,示例查询结果为

DATENAME结果

注意:还有许多其他日期部分可以与DATENAME一起使用。您可以在MSDN站点上找到完整列表。

下面是一个示例,说明如何使用它DATANAME来执行订单的某些汇总级别分析。

假设销售经理想要每周销售的摘要。使用DATENAME函数我们可以提供该信息。

SELECT   DATENAME(year, OrderDate) as OrderYear,DATENAME(week, OrderDate) as OrderWeek,SUM(TotalDue) as WeeklySales
FROM     Sales.SalesOrderHeader
WHERE    DATENAME(year, OrderDate) = '2008'
GROUP BY DATENAME(year, OrderDate), DATENAME(week, OrderDate)
ORDER BY DATENAME(year, OrderDate), DATENAME(week, OrderDate)

结果如下

DATENAME——注意OrderWeek按字符值排序

我想指出,虽然我们按年和周排序,但周似乎不合时宜。这是因为OrderWeek返回的是一个字符值。为了按数字排序,我们需要将结果转换为数值。

我们可以轻松地在ORDER BY子句中转换值,但是一旦您了解DATEPART,就没有必要这样做了。

DATEPART

返回一个整数,表示日期的指定部分。它的工作方式非常相似DATENAME,因为您指定了日期部分和值,但是,它返回7而不是返回如“July”的文本值。

DATEPART的一般形式是

DATEPART(date part, value)

其中日期部分对应于预定义部分的列表,是您使用的日期。

该函数返回一个整数。

以下是一个显示各种日期部分的示例。

SELECT DATEPART(YEAR, GETDATE()) as Year,DATEPART(WEEK, GETDATE()) as Week,DATEPART(DAYOFYEAR, GETDATE()) as DayOfYear,DATEPART(MONTH, GETDATE()) as Month,DATEPART(DAY, GETDATE()) as Day,DATEPART(WEEKDAY, GETDATE()) as WEEKDAY

假设GETDATE返回2015-08-10 12:56:25.313,示例查询结果为

DATEPART结果

注意:还有许多其他日期部分可以与DATEPART一起使用。您可以在MSDN站点上找到完整列表。

我们也可以像使用DATEPART获得销售总额的摘要,就像对DATENAME所做的那样。这是查询

SELECT   DATEPART(year, OrderDate) as OrderYear,DATEPART(week, OrderDate) as OrderWeek,SUM(TotalDue) as WeeklySales
FROM     Sales.SalesOrderHeader
WHERE    DATEPART(year, OrderDate) = 2008
GROUP BY DATEPART(year, OrderDate), DATEPART(week, OrderDate)
ORDER BY DATEPART(year, OrderDate), DATEPART(week, OrderDate)

您注意到这些结果根据周正确排序:

DATEPART结果按数字顺序排序

DAY, MONTH, YEAR

DAY,MONTH和YEAR函数根据提供的日期以整数形式返回日、月或年。

所有三个函数的一般形式相同。为简洁起见,我们只是展示DAY,其他两个函数以类似的方式工作。

这是它的一般形式:

DAY(value)

其中是你希望的日期。

以下是一个显示这些函数的快速示例

SELECT HireDate,YEAR(HireDate) as HireYear,MONTH(HireDate) HireMonth,DAY(HireDate) as HireDay
FROM   HumanResources.Employee

结果如下:

DAY,MONTH和YEAR的结果

你可能已经注意到YEAR(value)是DATEPART(year, value)简写。两者都返回相同的结果,以下是一个你可以尝试的SQL语句:

SELECT HireDate,YEAR(HireDate) as HireYear,DATEPART(year, HireDate) as HireYearFromDatePart
FROM   HumanResources.Employee

你会发现MONTH和DAY也是类似的。

修改和查找日期差异

DATEDIFF

DATEDIFF函数返回两个日期之间的年数,月数,周数或天数。

DATEDIFF的一般形式是

DATEDIFF(date part, start value, end value)

其中日期部分对应于预定义日期部分的列表,例如年,月,周和日。

差值在起始值和结束值之间计算。

这个函数可能看起来有点复杂,但它确实值得理解,因为它在SQL中有许多实际用途。

您可以使用它来计算帐单过期的天数,或两个日期之间的天数或周数。

考虑这个例子:

人力资源副总裁希望授予所有员工多年的服务奖励。她希望您提供十年以上服务的所有员工的报告。

为此,我们将使用DATEDIFF报告显示服务年数,并过滤掉服务年限少于十年的报告。

这是SQL语句

SELECT   NationalIDNumber,HireDate,DATEDIFF(year, HireDate, GETDATE()) YearsOfService
FROM     HumanResources.Employee
WHERE    DATEDIFF(year, HireDate, GETDATE()) >= 10
ORDER BY YearsOfService DESC

结果如何

DATEDIFF结果

DATEADD

DATEADD函数用于在日期之间添加年,月,周或天。

DATEADD的一般形式是

DATEADD(date part,number,value)

其中日期部分对应于预定义日期部分的列表,例如年,月,周和日,而数字指定要添加到值中日期部分的数量。

如果number为正数,则将该数量的日期部分添加到该值。

如果number为负数,则从值中减去日期部分的有效值。

这个函数可能看起来有点复杂,但它确实值得理解,因为它在SQL中有许多实际用途。

您可以使用它来计算账单到期之前的天数,或者计算未来或过去的天数或周数。

考虑这个例子:

销售经理一直在与生产经理谈论在网上销售商品。他们想要订购自行车。如果今天订购了自行车,何时可以将它们运送给客户?

如果您查看Product表,您会看到有一个DaysToManufacture字段。结合使用DATEADD和GETDATE()我们可以计算出未来的天数。

SELECT NAME,DaysToManufacture,GETDATE() as Today,DATEADD(day, DaysToManufacture, GETDATE()) EarliestDate
FROM   Production.Product
WHERE  DaysToManufacture > 1

结果是这样的

使用DATEADD将DAYS添加到DATE

学习使用SQL Server日期函数相关推荐

  1. SQL Server日期函数集合

    SQL Server日期函数集合--1:获取系统日期和时间值函数 --getdate() SELECT GETDATE() AS 'today' --getutcdate() SELECT GETUT ...

  2. Sql server 日期函数和日期转换

    时间函数 SQL Server Date 函数 下面的表格列出了 SQL Server 中最重要的内建日期函数: 函数 描述 GETDATE() 返回当前日期和时间 DATEPART(Type,dat ...

  3. SQL Server 日期函数:EOMonth、DateFormat、Format、DatePart、DateName

    一,月份的最后一天 函数 EOMonth 返回指定日期的最后一天 EOMONTH ( start_date [, month_to_add ] ) 1,对于start_date 有两种输入方式,能够转 ...

  4. SQL SERVER日期函数详细用法

    1.一个月第一天的 Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 2.本周的星期一 Select DATEADD(wk, DATEDIFF(wk,0, ...

  5. SQL Server日期函数详解与实战

    阅读目录 获取时间函数 getdate()函数 SYSDATETIME()函数 格式化函数 CONVERT()函数 FORMAT()函数 日期的拆分 YEAR(date),MONTH(date),DA ...

  6. Sql server日期函数操作

    1.获取前一小时内的数据:DATEADD(HOUR,-1,GETDATE()),将"HOUR"替换成DAY,Month,YEAR就是前一天,前一月,前一年 2.获取日期部分,格式为 ...

  7. SQL server日期格式转换

    日期格式转换 字符串转日期时间: convert(datetime,'2017-12-12 00:00:01', 20) 日期时间转字符串: Select CONVERT(varchar(100), ...

  8. SQL SERVER 日期格式化、日期和字符串转换

    SQL SERVER 日期格式化.日期和字符串转换 sql server 中怎么把字符串转化为日期? 1. convert(datetime,'YYYY-MM-DD HH24:MI:SS') 2. c ...

  9. SQL Server日期时间格式转换字符串详解

    1.日期时间转字符串 Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006  10:57AM Select CONVERT(varchar(10 ...

最新文章

  1. python发送微信消息_用python批量发送微信消息
  2. 如何在html中自动生成条形图,html5生成柱状图(条形图)效果的实例代码
  3. oauth2 token为空拦截_feign之间传递oauth2-token的问题和解决
  4. 狼行天下:追寻狼迹内蒙生态行第二天(续1)
  5. uni-app中使用腾讯位置服务实现小程序地图选点功能
  6. JVM虚拟机-Class文件之魔数
  7. 对数正态分布_正态分布与幂律分布
  8. java类构造函数调用顺序_Java中的构造函数调用顺序
  9. 用大数据预测雾霾,微软是如何做的?
  10. 光纤跳线接口_小白过来看,图解光缆、终端盒、尾纤、跳线的作用和接法
  11. Foxit PDF SDK ActiveX 5.9.4
  12. 适合记录日常工作的便签如何在电脑桌面上添加
  13. 常规WebRoot项目在Idea中通过tomcat运行
  14. java服务报错连接超时
  15. 基于Matlab的空中交通管制仿真(附源码)
  16. 史上最污的技术解读,我竟然秒懂了(上)
  17. 关于币圈炒币 你必须要知道的风险
  18. “Windows已经阻止此软件因为无法验证发行者”解决办法
  19. 手机蓝牙音响音质测试软件,多款蓝牙音箱对比评测 | 声音性能及产品硬素质对比评测_什么值得买...
  20. 英语六级口语 计算机,2020年5月英语六级口语惯用口语:计算机

热门文章

  1. c55x 汇编语言指令,[转载]关于TMS320C55x的汇编语言中的.sym伪指令
  2. 泰坦尼克号数据集_机器学习-预测泰坦尼克号生存概率
  3. java输入输出流_金九银十准备季:Java异常+Java IO与NIO面试题(含答案)
  4. kicad最小布线宽度默认是多少_超实用PCB布线技巧,菜鸟和老司机都应该知道!...
  5. 另存为里面没有jpg_CAD图不会转JPG?教你两个方法,从此CAD格式转换不再烦恼
  6. 设计灵感|大火C4D立体字效在海报中的应用
  7. 设计素材模板|艺术感中国风海报
  8. 完美摄影作品展,它可以是你作品的风格
  9. matlab 数组名含变量,求助:如何将带有符号变量的运算结果储存到数组中
  10. 如何查看bmp文件头_效率神器:史上最强最小文件搜索软件Everything!