`
liuyf8688
  • 浏览: 100314 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL SERVER 中的日期函数

阅读更多
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(),你可以获得当前的日期和时间。函数GETDATE()可以用来作为DATEDIME型字段的缺省值。这对插入记录时保存当时的时间是有用的。要建立一个表,其中的记录包含有当前的日期和时间,可以添加一个DATETIME型字段,指定其缺省值为函数GETDATE()的返回值,就象这样:

Create TABLE site_log (
username VARCHAR(40),
useractivity VARCHAR(100),
entrydate DATETIME DEFAULT GETDATE())

转换日期和时间
函数GETDATE()的返回值在显示时只显示到秒。实际上,SQL Sever内部时间可以精确到毫秒级(确切地说,可以精确到3.33毫秒)。
要得到不同格式的日期和时间,你需要使用函数CONVERT()。例如,当下面的这个语句执行时,显示的时间将包括毫秒:

Select CONVERT(VARCHAR(30),GETDATE(),9)

注意例子中数字9的使用。这个数字指明了在显示日期和时间时使用哪种日期和时间格式。当这个语句执行时,将显示如下的日期和时间:
Nov 30 1997 3:29:55:170AM
(1 row(s) affected)

在函数CONVERT()中你可以使用许多种不同风格的日期和时间格式。下表显示了所有的格式。

日期和时间的类型:
类型值 标准 输出
0 Default mon dd yyyy hh:miAM
1 USA mm/dd/yy
2 ANSI yy.mm.dd
3 British/French dd/mm/yy
4 German dd.mm.yy
5 Italian dd-mm-yy
6 - dd mon yy
7 - mon dd,yy
8 - hh:mi:ss
9 Default + milliseconds--mon dd yyyy
hh:mi:ss:mmmAM(or )
10 USA mm-dd-yy
11 JAPAN yy/mm/dd
12 ISO yymmdd
13 Europe Default + milliseconds--dd mon yyyy
hh:mi:ss:mmm(24h)
14 - hh:mi:ss:mmm(24h)

类型0,9,和13总是返回四位的年。对其它类型,要显示世纪,把style值加上100。类型13和14返回24小时时钟的时间。类型0,7,和13返回的月份用三位字符表示(用Nov代表November).

对表中所列的每一种格式,你可以把类型值加上100来显示有世纪的年(例如,00年将显示为2000年)。例如,要按日本标准显示日期,包括世纪,你应使用如下的语句:

Select CONVERT(VARCHAR(30),GETDATE(),111)

在这个例子中,函数CONVERT()把日期格式进行转换,显示为1997/11/30

抽取日期和时间
在许多情况下,你也许只想得到日期和时间的一部分,而不是完整的日期和时间。为了抽取日期的特定部分,你可以使用函数DATEPART(),象这样:

Select site_name ‘Site Name’,
DATEPART(mm,site_entrydate) ‘Month Posted’ FROM site_directory

函数DATEPART()的参数是两个变量。第一个变量指定要抽取日期的哪一部分;第二个变量是实际的数据。在这个例子中,函数DATEPART()抽取月份,因为mm代表月份。下面是这个Select 语句的输出结果:

Site Name Month Posted
………………………………………………………………
Yahoo 2
Microsoft 5
Magicw3 5
(3 row(s) affected)

Month Posted列显示了每个站点被查询的月份。函数DATEPART()的返回值是一个整数。你可以用这个函数抽取日期的各个不同部分,如下表所示。

日期的各部分及其简写
日期部分 简写 值
year yy 1753--9999
quarter qq 1--4
month mm 1--12
day of year dy 1--366
day dd 1--31
week wk 1--53
weekday dw 1--7(Sunday--Saturday)
hour hh 0--23
minute mi 0--59
second ss 0--59
milisecond ms 0--999

当你需要进行日期和时间的比较时,使用函数DATEPART()返回整数是有用的。但是,上例中的查询结果(2,5)不是十分易读。要以更易读的格式得到部分的日期和时间,你可以使用函数DATENAME(),如下例所示:

Select site_name ‘Site Name’
DATENAME(mm,site_entrydate) ‘Month Posted’
FROM site_directory

函数DATENAME()和函数DATEPART()接收同样的参数。但是,它的返回值是一个字符串,而不是一个整数。下面是上例该用DATENAME()得到的结果:

Site Name Month Postec
………………………………………………………………….
Yahoo February
Microsoft June
Magicw3 June
(3 row(s) affected)

你也可以用函数DATENAE()来抽取一个星期中的某一天。下面的这个例子同时抽取一周中的某一天和日期中的月份:

Select site_name ‘Site Name’,
DATENAME(dw,site_entrydate)+ ‘-’ + DATENAME(mm,site_entrydate)
‘Day and Month Posted’ FORM site_directory

这个例子执行时,将返回如下的结果:

Site Name Day and Month Posted
………………………………………………………………………
Yahoo Friday - February
Microsoft Tuesday - June
Magicw3 Monday - June
(3 row(s) affected)

返回日期和时间范围
当你分析表中的数据时,你也许希望取出某个特定时间的数据。你也许对特定的某一天中――比如说2000年12月25日――访问者在你站点上的活动感兴趣。要取出这种类型的数据,你也许会试图使用这样的Select语句:

Select * FROM weblog Where entrydate="12/25/20000"

不要这样做。这个Select语句不会返回正确的记录――它将只返回日期和时间是12/25/2000 12:00:00:000AM的记录。换句话说,只有刚好在午夜零点输入的记录才被返回。

问题是SQL Sever将用完整的日期和时间代替部分日期和时间。例如,当你输入一个日期,但不输入时间时,SQL Sever将加上缺省的时间“12:00:00:000AM”。当你输入一个时间,但不输入日期时,SQL Sever将加上缺省的日期“Jan 1 1900”。
要返回正确的记录,你需要适用日期和时间范围。有不止一种途径可以做到这一点。例如,下面的这个Select 语句将能返回正确的记录:

Select * FROM weblog
Where entrydate>=”12/25/2000” AND entrydate<”12/26/2000”

这个语句可以完成任务,因为它选取的是表中的日期和时间大于等于12/25/2000 12:00:00:000AM并小于12/26/2000 12:00:00:000AM的记录。换句话说,它将正确地返回2000年圣诞节这一天输入的每一条记录。
另一种方法是,你可以使用LIKE来返回正确的记录。通过在日期表达式中包含通配符“%”,你可以匹配一个特定日期的所有时间。这里有一个例子:

Select * FROM weblog Where entrydate LIKE ‘Dec 25 2000%’

这个语句可以匹配正确的记录。因为通配符“%”代表了任何时间。
使用这两种匹配日期和时间范围的函数,你可以选择某个月,某一天,某一年,某个小时,某一分钟,某一秒,甚至某一毫秒内输入的记录。但是,如果你使用LIKE 来匹配秒或毫秒,你首先需要使用函数CONVERT()把日期和时间转换为更精确的格式(参见前面“转换日期和时间”一节)。

比较日期和时间
最后,还有两个日期和时间函数对根据日期和时间取出记录是有用的。使用函数DATEADD()和DATEDIFF(),你可以比较日期的早晚。例如,下面的Select语句将显示表中的每一条记录已经输入了多少个小时:

Select entrydate ‘Time Entered’
DATEDIFF(hh,entrydate,GETDATE()) ‘Hours Ago’ FROM weblog

如果当前时间是2000年11月30号下午6点15分,则会返回如下的结果:

Time Entered Hours Ago
…………………………………………………..
Dec 30 2000 4:09PM 2
Dec 30 2000 4:13PM 2
Dec 1 2000 4:09PM 698
(3 row(s) affected)

函数DADEDIFF()的参数是三个变量。第个变量指定日期的某一部分。在这个例子中,是按小时对日期进行比较,(要了解日期各部分的详细内容,请参考表11.2)在日期2000年11月1日和2000年11月30日的指定时间之间有689个小时。另外两个参数是要进行比较的时间。为了返回一个正数,较早的时间应该先给。
函数DATEADD()把两个日期相加。当你需要计算截止日期这一类的数据时,这个函数是有用处的。假如你要查询一个月前注册用户的记录,你可以使用如下的Select语句:

Select username ‘User Name’,
DATEADD(mm,1,firstvisit_date) ‘Registration Expires’
FROM registration_table

函数DATEADD()的参数有三个变量。第一个变量代表日期的某一部分,这个例子用到了代表月份的mm。第二个变量指定了时间的间隔――在本例中是一个月。最后一个变量是一个日期,在这个例子中,日期是取自DATETIME型字段firstvisit_date.假设当前日期是June 30,2000,这个语句将返回如下的内容:

User Name Registration Expires
……………………………………………………………………………
Bill Gates Jul 30 2000 4:09PM
President Clinton Jul 30 2000 4:13PM
William Shakespeare Jul 1 2000 4:09PM
(3 row(s) affected)

注意:
使用函数DATEADD()把一个日期加上一个月,它并不加上30天。这个函数只简单地把月份值加1。
分享到:
评论

相关推荐

    SQLSERVER时间日期函数详解

    SQLSERVER 时间日期函数详解 SQL Server 提供了多种时间日期函数,帮助开发者快速处理日期和时间相关的操作。下面将对这些函数进行详解,并提供示例。 1. GetDate() 函数 GetDate() 函数用于返回当前系统的日期和...

    SQL SERVER 关于日期函数(字符转日期,日期转字符串)

    SQL Server 中的日期函数是数据库管理系统中非常重要的一部分,它提供了多种方式来处理日期和时间数据。在本文中,我们将详细介绍 SQL Server 中的日期函数,包括字符转日期、日期转字符串等方面的知识点。 日期...

    SqlServer日期处理函数

    ### SqlServer 日期处理函数详解 #### 概述 SqlServer 提供了一系列强大的日期处理函数,这些函数可以帮助开发者和数据库管理员高效地操作日期和时间数据。本文档将详细介绍几个常用的日期处理函数及其应用场景,并...

    SQLServer时间日期函数详解.doc

    以下是SQL Server中一些主要的时间日期函数的详细解释: 1. **GETDATE()**: 这个函数返回系统当前的日期和时间,格式为datetime类型。例如: ```sql SELECT GETDATE(); ``` 结果将显示当前日期和时间。 2. *...

    sqlserver日期函数.pdf

    根据提供的文件内容,以下是对SQL Server中日期函数的知识点总结: 1. GETDATE()函数 这是SQL Server中最常用的一个日期函数,用于获取当前系统的日期和时间。函数不带任何参数,返回的是一个datetime类型的数据。...

    SQL Server 日期函数的使用

    在sql server中日期的处理对于大多数人来说是一个很头疼的问题,现在这篇文档中包含了所有的日期函数以及日期显示语句,希望对你有所帮助。

    T-SQL性能调优秘笈 基于SQL Server 2012窗口函数_PDF电子书

    - **窗口函数概述**:窗口函数(Window Function)是在SQL Server中处理复杂查询的一种强大工具,它可以用来执行分组内的计算,如排名、行号、累计总和等操作。 - **常见的窗口函数**: - `ROW_NUMBER()`:为每一行...

    SQL_SERVER日期函数详细用法

    SQL Server 日期函数详细用法 SQL Server 提供了多种日期函数,用于处理日期和时间数据。下面将详细介绍这些函数的用法。 1. GETDATE() 函数 GETDATE() 函数用于获取当前日期和时间。该函数返回当前服务器的日期...

    SQL Server中日期问题的解决

    `DateDiff`函数是SQL Server中用于计算两个日期之间的差值的一种方法。当需要判断某列中的日期是否等于特定日期时,可以使用此函数。例如,如果希望找出所有日期为2004年12月19日的数据记录,则可以使用以下SQL语句...

    SQLServer日期时间函数

    本文将详细介绍几个常用的SQL Server日期时间函数,并通过示例来说明它们的具体用法。 #### 二、常用日期时间函数详解 ##### 1. DATENAME (datepart, date) - **功能**:此函数返回表示指定日期的指定日期部分的...

    sqlserver2000日期函数处理大全

    在SQL Server 2000中,日期函数是数据库管理员和开发人员进行数据查询和处理时不可或缺的一部分。这些函数允许我们对日期和时间数据进行各种操作,如提取特定部分(如年、月、日),计算两个日期之间的差异,或者...

    Sqlserver 自定义函数 Function使用介绍

    SQL Server中的自定义函数是数据库开发中非常重要的组成部分,它们允许开发者创建自定义的逻辑,以便在查询中重用和简化复杂操作。本篇主要关注SQL Server 2008中的三种自定义函数:标量函数、内联表值函数和多语句...

    sql server 和oracle函数

    根据给定的信息,本文将对SQL Server与Oracle数据库系统中的函数进行详细对比分析,主要涉及数学函数、字符函数以及日期函数。以下是对这些知识点的具体展开: ### 数学函数 #### 绝对值 - **SQL Server**: 使用 `...

    SQLServer2000常用函数大全(经典)

    本资源"SQLServer2000常用函数大全(经典)"显然是一个综合性的教程,旨在帮助用户熟悉并掌握SQL Server 2000中的主要函数。以下是一些关键的SQL Server 2000函数及其应用: 1. **聚合函数**: - `COUNT()`:返回...

    SQLServer2000常用函数大全

    这个资料包"SQLServer2000常用函数大全"涵盖了日期处理、自动编号以及存储过程和函数编写的相关例程,旨在帮助用户更好地理解和运用这些功能。 1. **日期处理函数**: - `GETDATE()`:返回当前系统的日期和时间。 ...

    sqlserver中日期型字段设默认值

    在SQL Server中,设置日期型字段的默认值可以通过多种方式实现,其中最常用的是使用`GETDATE()`函数和`DATEADD()`函数。下面将详细介绍这两种方法: #### 使用`GETDATE()`函数 `GETDATE()`函数返回系统当前的日期...

    SQL Server-DatePart函数

    `DATEPART`函数还可以与其他日期函数结合使用,例如`DATEADD`和`DATEDIFF`,来实现更复杂的日期运算。例如,找出所有在过去30天内下过的订单: ```sql SELECT * FROM Orders WHERE OrderDate &gt;= DATEADD(day, -30, ...

    sql server常用函数大全下载

    总的来说,这份"SQLServer2005常用函数大全及个人毕生收藏.CHM"资源将帮助你深入理解SQL Server 2005中的函数用法,提升你的SQL编程技能,从而更好地管理和操作数据库。无论是初学者还是经验丰富的开发者,都应该...

Global site tag (gtag.js) - Google Analytics