sqlserver日期函数 dateadd,datediff ,datepart ,datename,convert

摘要:
reference:http://www.cnblogs.com/coconut_zhang/archive/2009/02/02/1382598.htmlhttp://blog.itpub.net/14766526/viewspace-1156100/selectGETDATE()as'当前日期',DateName(year,GetDate())as'年',DateName(month,GetD

reference:http://www.cnblogs.com/coconut_zhang/archive/2009/02/02/1382598.html

http://blog.itpub.net/14766526/viewspace-1156100/

select GETDATE() as '当前日期',
DateName(year,GetDate()) as '年',
DateName(month,GetDate()) as '月',
DateName(day,GetDate()) as '日',
DateName(dw,GetDate()) as '星期',
DateName(week,GetDate()) as '周数',
DateName(hour,GetDate()) as '时',
DateName(minute,GetDate()) as '分',
DateName(second,GetDate()) as '秒'

sqlserver日期函数 dateadd,datediff ,datepart ,datename,convert第1张

1. 当前系统日期、时间

select getdate() --2015-05-06 08:40:17.870

今天去掉时分秒

SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)  --2015-05-06 00:00:00.000

declare @ datetime
set @ = getdate()
SELECT @,DATEADD(day, DATEDIFF(day,0,@),0)

今天昨天与明天

select getdate() as today --2015-05-06 07:36:06.957

select dateadd(day,-1,getdate()) --2015-05-05 07:36:06.957

select dateadd(day,1,getdate()) --2015-05-07 07:36:06.957

取系统日期 并将 日期 分开
select 当前日期=convert(varchar(10),dateadd(day,-1,getdate()),120),当前时间=convert(varchar(8),getdate(),114) --当前日期:2015-05-06,当前时间:08:26:07

取当前是周数与星期几

select 当前是第几周=datename(week,getdate()),今天是周几=datename(weekday,getdate()) --当前是第几周:19,今天是周几:星期三

获取当前为星期几
DATENAME(weekday, getdate())

显示本月第一天
SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0)
select convert(datetime,convert(varchar(8),getdate(),120)+'01',120)

上个月的第一天

SELECT DATEADD(mm, DATEDIFF(mm,0,getdate())-1, 0)

显示本月最后一天
select dateadd(day,-1,convert(datetime,convert(varchar(8),dateadd(month,1,getdate()),120)+'01',120))
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))

上个月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))

本月的第一个星期一
select DATEADD(wk,DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate())),0)

本年的第一天
SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0)

本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0))

去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))

本季度的第一天
SELECT DATEADD(qq,DATEDIFF(qq,0,getdate()),0)

当天的半夜

SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)

本周的星期一
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0)

查询本月的记录
select * from tableName where DATEPART(mm, theDate) = DATEPART(mm, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())

查询本周的记录
select * from tableName where DATEPART(wk, theDate) = DATEPART(wk, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())

查询本季的记录
select * from tableName where DATEPART(qq, theDate) = DATEPART(qq, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())
获取当月总天数:
select DATEDIFF(dd,getdate(),DATEADD(mm, 1, getdate()))

获取某月总天数

declare @y varchar(8)
declare @m int
set @y='2004'
set @m=2 --月份
select DATEDIFF(day,@y+'-'+cast(@m as varchar)+'-15' ,@y+'-'+cast(@m+1 as varchar)+'-15') --29

查询某个日期之间的记录数据:
select * from 表 where 开始时间>'2005-02-01' and 结束时间<='2005-06-05'order by id desc

查询最近30内的记录数据:
select * from 表 where datediff(Dd,日期字段,getdate())<=30 order by id desc

查询最近一周内的点击率大于100的记录数据:
select * from 表 where hit_count>100 and datediff(Dw,日期字段,getdate())<=7 order by id desc

判断是否闰年
SELECT case day(dateadd(mm,2,dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)))) when 28 then '平年' else '闰年' end
--或者
select case DATEDIFF(day,datename(year,getdate())+'-02-01',dateadd(mm,1,datename(year,getdate())+'-02-01'))
when 28 then '平年' else '闰年' end

函数 参数/功能
GetDate( ) 返回系统目前的日期与时间
DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1
DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期
DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值
DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称
参数 interval的设定值如下:
值 缩 写(Sql Server) 说明
Year Yy 年 1753 ~ 9999
Quarter Qq 季 1 ~ 4
Month Mm 月1 ~ 12
Day of year Dy 一年的日数,一年中的第几日 1-366
Day Dd 日,1-31
Weekday Dw 一周的日数,一周中的第几日 1-7
Week Wk 周,一年中的第几周 0 ~ 51
Hour Hh 时0 ~ 23
Minute Mi 分钟0 ~ 59
Second Ss 秒 0 ~ 59
Millisecond Ms 毫秒 0 ~ 999

2. dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值

例如:向日期加上2天

select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000

3. datediff 返回跨两个指定日期的日期和时间边界数。

select datediff(day,'2004-09-01','2004-09-18') --返回:17

select datediff(day,'2004-09-18','2004-09-01') --返回:-17

select datediff(month,'1991-6-12','1992-6-21') --返回:-12

4. datepart 返回代表指定日期的指定日期部分的整数。

SELECT DATEPART(month, '2004-10-15') --返回 10 ,年为year,月为month,日为day,小时hour,分为minute,秒为second

DatePart(w,'2005-7-25 22:56:32') 返回值为 2 即星期一(周日为1,周六为7)
DatePart(d,'2005-7-25 22:56:32') 返回值为 25即25号
DatePart(y,'2005-7-25 22:56:32') 返回值为 206即这一年中第206天
DatePart(yyyy,'2005-7-25 22:56:32') 返回值为 2005即2005年

5. datename 返回代表指定日期的指定日期部分的字符串

SELECT datename(weekday, '2004-10-15') 或者SELECTdatename(dw,'2004-10-15') --返回:星期五

6. day(), month(),year() --可以与datepart对照一下

select DAY('2015-05-06') 或SELECT DATEPART(d, '2015-05-06') --返回:6

7.convert() 函数是把日期转换为新数据类型的通用函数。

CONVERT(data_type(length),data_to_be_converted,style)

data_type(length)规定目标数据类型(带有可选的长度)。data_to_be_converted含有需要转换的值。style规定日期/时间的输出格式。

可以使用的style值:

Style IDStyle 格式
100 或者 0mon dd yyyy hh:miAM (或者 PM)
101mm/dd/yy
102yy.mm.dd
103dd/mm/yy
104dd.mm.yy
105dd-mm-yy
106dd mon yy
107Mon dd, yy
108hh:mm:ss
109 或者 9mon dd yyyy hh:mi:ss:mmmAM(或者 PM)
110mm-dd-yy
111yy/mm/dd
112yymmdd
113 或者 13dd mon yyyy hh:mm:ss:mmm(24h)
114hh:mi:ss:mmm(24h)
120 或者 20yyyy-mm-dd hh:mi:ss(24h)
121 或者 21yyyy-mm-dd hh:mi:ss.mmm(24h)
126yyyy-mm-ddThh:mm:ss.mmm(没有空格)
130dd mon yyyy hh:mi:ss:mmmAM
131dd/mm/yy hh:mi:ss:mmmAM

eg:

select CONVERT(VARCHAR(19),GETDATE()),
CONVERT(VARCHAR(10),GETDATE(),110),
CONVERT(VARCHAR(11),GETDATE(),106),
CONVERT(VARCHAR(24),GETDATE(),113)

结果

sqlserver日期函数 dateadd,datediff ,datepart ,datename,convert第2张

1、日期格式化处理

DECLARE @dt datetime
SET @dt=GETDATE()
--1.短日期格式:yyyy-m-d
SELECT REPLACE(CONVERT(varchar(10),@dt,120),N'-0','-')
--2.长日期格式:yyyy年mm月dd日
--A. 方法1
SELECT STUFF(STUFF(CONVERT(char(8),@dt,112),5,0,N'年'),8,0,N'月')+N'日'
--B. 方法2
SELECT DATENAME(Year,@dt)+N'年'+DATENAME(Month,@dt)+N'月'+DATENAME(Day,@dt)+N'日'
--3.长日期格式:yyyy年m月d日
SELECT DATENAME(Year,@dt)+N'年'+CAST(DATEPART(Month,@dt) AS varchar)+N'月'+DATENAME(Day,@dt)+N'日'
--4.完整日期+时间格式:yyyy-mm-dd hh:mi:ss:mmm
SELECT CONVERT(char(11),@dt,120)+CONVERT(char(12),@dt,114)

结果

sqlserver日期函数 dateadd,datediff ,datepart ,datename,convert第3张

2、日期推算处理
DECLARE @dt datetime
SET @dt=GETDATE()
DECLARE @number int
SET @number=3
--1.指定日期该年的第一天或最后一天
--A. 年的第一天
SELECT CONVERT(char(5),@dt,120)+'1-1'
--B. 年的最后一天
SELECT CONVERT(char(5),@dt,120)+'12-31'
--2.指定日期所在季度的第一天或最后一天
--A. 季度的第一天
SELECT CONVERT(datetime,
CONVERT(char(8),
DATEADD(Month,
DATEPART(Quarter,@dt)*3-Month(@dt)-2,
@dt),
120)+'1')
--B. 季度的最后一天(CASE判断法)
SELECT CONVERT(datetime,
CONVERT(char(8),
DATEADD(Month,
DATEPART(Quarter,@dt)*3-Month(@dt),
@dt),
120)
+CASE WHEN DATEPART(Quarter,@dt) in(1,4)
THEN '31'ELSE '30' END)
--C. 季度的最后一天(直接推算法)
SELECT DATEADD(Day,-1,
CONVERT(char(8),
DATEADD(Month,
1+DATEPART(Quarter,@dt)*3-Month(@dt),
@dt),
120)+'1')
--3.指定日期所在月份的第一天或最后一天
--A. 月的第一天
SELECT CONVERT(datetime,CONVERT(char(8),@dt,120)+'1')
--B. 月的最后一天
SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+'1')
--C. 月的最后一天(容易使用的错误方法)
SELECT DATEADD(Month,1,DATEADD(Day,-DAY(@dt),@dt))
--4.指定日期所在周的任意一天
SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)
--5.指定日期所在周的任意星期几
--A. 星期天做为一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)
--B. 星期一做为一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)

sqlserver日期函数 dateadd,datediff ,datepart ,datename,convert第4张

select CONVERT(varchar, getdate(), 120 )
--2016-12-01 13:54:25

SELECT CONVERT(VARCHAR(8), getdate(), 120)
--2016-12-
SELECT CONVERT(VARCHAR(8), getdate(), 120) + '01'
--2016-12-01

--日期算当月天数
SELECT
DAY(DATEADD(DAY, -1, CONVERT(DATETIME, CONVERT(CHAR(07), DATEADD(m, 1, GETDATE()), 120) + '-01 ')))
SELECT
32 - DAY(GETDATE() + (32 - DAY(GETDATE())))

--计算年份为1996年

CONVERT(CHAR(4), order_date, 120) = '1996 '

sql 将8位字符串转换成日期型
SELECT CONVERT(varchar(10),CAST('20070405' AS datetime),120)

C#将8位日期数字转换成日期格式
string str = "20100531";
DateTime dtime = DateTime.ParseExact(str,"yyyyMMdd",null);
Response.Write(dtime.ToString("yyyy-MM-dd"));

SELECT CONVERT(VARCHAR(19), GETDATE(), 120);
--2019-05-16 20:38:41

SELECT CONVERT(VARCHAR(10), GETDATE(), 120);
--2019-05-16
SELECT CONVERT(VARCHAR(100), GETDATE(), 23); --2019-05-16


sql server 日期时间转成字符串 怎么去掉横线、冒号、点
Select CONVERT(varchar(100), GETDATE(), 112)+replace(CONVERT(varchar(100), GETDATE(), 114),':','')
--结果:20200814143439997
C#代码:
日期格式化:yyyyMMddHHmmssfff
20200814144055990

免责声明:文章转载自《sqlserver日期函数 dateadd,datediff ,datepart ,datename,convert》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇转 怎样用grep命令去掉空格行和以#开头的行shell 获取MySQL查询结果并处理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

php连接数据库(一)

1、php链接数据库: 1、链接数据库  2、判断是否连接成功 3、设置字符集 4、选择数据库 5、准备SQL语句 6、发送SQL语句 7、处理结果集 8、释放资源(关闭数据库)   $result = mysqli_querry($link,$sql) //返回一个对象   mysqli_fetch_assoc($result) 一个一个往下读,返回的时...

《C++ Qt设计模式》 第一章 C++ 简介

第1 章 C++简介 内容: 编译相关     Qt提供了一个qmake工具,它会产生Makefile 文件。使用qmake -project 命令产生一个简单的工程文件。当执行这个命令时,qmake 会将当前工作目录下的全部源文件作为SOURCES列出来,而将全部头文件作为HEADERS 列出来     使用make 重新编译那些发生了变化的文件,或...

oracle 中的truncate 和delete

一、查询表大小,块多少语句 Select SEGMENT_Name,BYTES,BLOCKS,Extents From dba_segments Where segment_name In('BAI_NEW_SESSION_HISTORY2') order by segment_name; (2)查表空间 Select Tablespace_Name,...

MySQL高级查询(一)

in 子查询:嵌套查询(重点是思路) 为什么要用in? in 在数值上相当于‘=’但是它可以查询到更多的符合条件的结果,等于号只可以查询一个结果 question: 有两种方法: 第一种:使用子查询替换表连接: 使用 inner join 将表与表之间联动,再将实现条件依次写出来 第二种:采用子查询: 在where那里添加select两表联动通过stud...

XML文件的解析--libxml库函数解释

[c语言]XML文件的解析--libxml库函数解释 2009-09-02 13:12 XML文件的解析--libxml库函数解释 libxml(一)                                     摘要 Libxml是一个有免费许可的用于处理XML、可以轻松跨越多个平台的C语言库。这个指南提供它的基本函数的例子。绪论 Lib...

sqlserver列转行

在项目中,我们经常会遇到在数据库中一对多的情况,关联查询又会产生多条重复数据,这时用到列转行 1.sqlserver列转行,不带where条件 select STUFF((SELECT ';'+PATH FROM T_GMM_DUOMEITI (NOLOCK) for xml path('') ),1,1,'' ) 2.sqlserver列转行,包...