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 '秒'

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

结果

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)

结果

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)

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

 

转载于:https://www.cnblogs.com/shy1766IT/p/4480860.html

sqlserver日期函数 dateadd,datediff ,datepart ,datename,convert相关推荐

  1. SQLServer日期函数及查询当日昨日本周本月本季度本年数据

    目录: 1. 查询当日.昨日.本周.本月.本季度.本年数据 2. 获取其他日期数据 查询结果: 3. 日期函数: 3.1 日期函数中参数 type 的设定值: 3.2 Convert(data_typ ...

  2. SQLServer日期函数的使用

    SQLServer常用的日期函数有: GETDATE():获取当前时间 年月日时分秒 CONVERT():设置不同的格式显示时间 CONVERT()有三个参数,第一个参数的意思是需要转换你所需要的长度 ...

  3. 使用sqlserver日期函数获取当前日期

    使用sqlserver日期函数中的getdate()可以获取当现的日期,下面就将为您介绍这种使用sqlserver日期函数获取当前日期的方法,供您参考,希望对您学习sqlserver日期函数有所启迪. ...

  4. sqlserver 日期函数

    sqlserver 日期函数 getdate方法 getadd方法 datediff

  5. mysql日期函数之DATEDIFF() if()用法 case when用法

    mysql日期函数之DATEDIFF() if()用法 case when用法 背景: 用户密码七天后会过期,用户修改密码时会同步添加修改时间进数据库, 登录时校验用户是否需要修改密码, 一开始想的时 ...

  6. SQLServer 日期函数大全

    一.统计语句 1.--统计当前[>当天00点以后的数据] SELECT * FROM 表 WHERE CONVERT(Nvarchar, dateandtime, 111) = CONVERT( ...

  7. Sqlserver日期函数datepart

    返回代表指定日期的指定日期部分的整数. 看例子: select datepart(year,getdate()) select datepart(quarter,getdate()) select d ...

  8. sqlserver常用函数/存储过程/数据库角色

    /*日期函数*/ DATEADD ( datepart , number, date )  --在向指定日期加上一段时间的基础上,返回新的 datetime 值. DATEDIFF ( datepar ...

  9. SQL数据库语言基础之SqlServer系统函数、聚合集合函数【大总结】

    文章目录 1.聚合函数 2.类型转换函数 3.日期函数 4.数学函数 5.字符函数 6.其他系统函数 1.聚合函数 (1)聚合函数的概念 它是系统函数中最常用的一类函数,主要是对一组值进行计算,然后返 ...

最新文章

  1. 3层交换机和2层交换机的区别
  2. VC++ inline内联函数的作用解决方案
  3. Spring MVC中注解 @ModelAttribute
  4. struct timeval结构体
  5. 函数的方法call、apply、bind
  6. 从库存管理系统,体验活字格强大的移动端应用开发能力
  7. 零件分组pascal程序
  8. jfinal使用render之后还会继续往下执行代码吗
  9. 在oracle中使用Trigger
  10. 李彦宏:Apollo Moon共享无人车必须要比打车便宜;消息称iPhone 12 mini已停产;抖音网页版上线|极客头条...
  11. IOS之UI--自定义按钮实现代理监听点击事件
  12. linux下查找文件、排序、查看文件内容
  13. [lammps安装教程]lammps串行版安装教程
  14. 淘宝APP用户行为数据分析 by 一只废鹅
  15. B编码以及BT种子文件分析
  16. SPSS新手教程—kappa一致性检验
  17. 仙剑永恒的经典──仙剑诗集
  18. 学术论文科研写作方法总结--针对深度学习,自然语言处理等领域
  19. 关于Spring中在applicationContext.xml中AOP(aop:aspectj-autoproxy)的配置问题记录:
  20. 我提交了一个 pr,只是为了吃

热门文章

  1. svn is already locked
  2. 服务器上的文件如何查看,如何查看远程服务器上的文件
  3. 仿京东显示隐藏密码明文案例(字体图标实现)
  4. oracle里面的degree,收集统计信息degree不生效的问题
  5. 条件判断_判断疑似陨石应具备什么条件下,才能判断陨石真伪
  6. 设计模式—工厂模式(思维导图)
  7. bzoj 3375: [Usaco2004 Mar]Paranoid Cows 发疯的奶牛(二分)
  8. bzoj 1044: [HAOI2008]木棍分割(二分+DP)
  9. 2017CCPC哈尔滨 M:Geometry Problem(随机)
  10. bzoj 4818: [Sdoi2017]序列计数(DP+矩阵快速幂)