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。

SQL Server里面可能经常会用到的日期格式转换方法:
举例如下:
select CONVERT(varchar, getdate(), 120 )
--2004-09-12 11:06:08

select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')
--20040912110608

select CONVERT(varchar(12) , getdate(), 111 )
--2004/09/12

select CONVERT(varchar(12) , getdate(), 112 )
--20040912

select CONVERT(varchar(12) , getdate(), 102 )
--2004.09.12

select CONVERT(varchar(12) , getdate(), 101 )
--09/12/2004

select CONVERT(varchar(12) , getdate(), 103 )
--12/09/2004

select CONVERT(varchar(12) , getdate(), 104 )
--12.09.2004

select CONVERT(varchar(12) , getdate(), 105 )
--12-09-2004

select CONVERT(varchar(12) , getdate(), 106 )
--12 09 2004

select CONVERT(varchar(12) , getdate(), 107 )
--09 12, 2004

select CONVERT(varchar(12) , getdate(), 108 )
--11:06:08

select CONVERT(varchar(12) , getdate(), 109 )
--09 12 2004 1

select CONVERT(varchar(12) , getdate(), 110 )
--09-12-2004

select CONVERT(varchar(12) , getdate(), 113 )
--12 09 2004 1

select CONVERT(varchar(12) , getdate(), 114 )
--11:06:08.177

转载于:https://www.cnblogs.com/java315/archive/2010/08/04/2397319.html

SQL SERVER日期函数详细用法相关推荐

  1. sql中日期函数的用法

    sql中日期函数的用法   <script src="http://blog.csdn.net/count.aspx?ID=1920773&Type=Rank" ty ...

  2. SQL Server日期函数集合

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

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

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

  4. 学习使用SQL Server日期函数

    目录 SQL Server的日期函数简介 用于获取当前日期和时间的函数 GETDATE 获取日期部分的函数 DATENAME DATEPART 修改和查找日期差异 DATEDIFF DATEADD S ...

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

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

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

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

  7. Sql server日期函数操作

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

  8. SQL server日期格式转换

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

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

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

最新文章

  1. 如何完成一次快速的查询?
  2. JS 进制转换的理解
  3. STM32 HAL库、标准外设库、LL库(STM32 Embedded Software)
  4. Linux下网络流量实时监控工具 大全
  5. 2017.12.19 白盒测试作业第四次小组例会
  6. TF之AutoML之AdaNet框架:AdaNet框架的简介、特点、使用方法详细攻略
  7. 用户运营的三种思维层级,你在哪一层?
  8. WebBrowser控件的常用方法、属性和事件
  9. mac安装gdb及为gdb进行代码签名
  10. 【转】使用websocket-sharp来创建c#版本的websocket服务
  11. 【SpringBoot 2】(九)异常处理 web原生组件的注入
  12. 使用七牛图片遇到的图片方向翻转问题
  13. 送你两个神器,关系数据库数据入湖轻松应对
  14. python之获取标准时区的时间元组
  15. php做商品预告,预告:关于php制作桌面软件的方案与未来规划
  16. 不同域名指向一个Web站点,ICP证如何设置
  17. django Error: That port is already in use.
  18. 文本居中对齐(CSS、HTML)
  19. Mac声音太小?那你不能错过这款神器Boom 2
  20. mac自带代码对比工具

热门文章

  1. CVPR2019,开源活体检测
  2. AI辅助构建知识图谱:关系抽取
  3. java缓存管理器_使用@EnableCaching的Spring Boot默认缓存管理器
  4. vc sleep不占进程_Python 中的进程深入
  5. pytorch模型转onnx遇到的问题记录
  6. AttributeError: module ‘onnxruntime‘ has no attribute ‘InferenceSession‘
  7. python网页数据处理_python 处理html页面爬虫数据
  8. 可复用的基于ARM的W5100底层驱动设计
  9. 基于AWT、Swing的GUI编程 - 多个命令共享同一个监听器类
  10. android 中如何监听耳机键消息