SQLServer日期函数总结案例详解

目录
  • 一,日期的格式化
  • 二,日期和时间的结构
  • 三,日期操作
  • 四. 日期函数

SQL Server发展至今,关于日期的格式的控制方法,有传统的方法,比如CONVERT(),也有比较便利的新方法,比如FORMAT();同样,关于日期的操作函数,也分为传统方法:DATEADD()等,也有便利的新方法:EOMonth()等。

一,日期的格式化

格式化是指把日期类型(Date)、日期和时间类型转化为字符类型,通常使用CONVERT()和FORMAT()函数。

1,传统的CONVERT()

SQL Server控制日期的的显示格式,通常使用CONVERT()函数,通过控制style参数来控制日期显示的格式,但是,style很多,不利于记忆。

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

符合东方人阅读习惯的style及其显示格式如下:

  • 101: mm/dd/yyyy
  • 110: mm-dd-yyyy
  • 111: yyyy/mm/dd
  • 112: yyyymmdd
  • 120: yyyy-mm-dd hh:mm:ss
  • 121: yyyy-mm-dd hh:mm:sssssss

CONVERT()函数的style是数字,记忆起来比较困难,并且只能按照系统定义的格式来显示,不够灵活。SQL Server提供更为灵活的转换函数FORMAT()。

2,便利的FORMAT()函数

FORMAT()函数,可以方便和灵活地控制数值、日期和时间类型的显示格式,通常情况下,FORMAT()函数主要用于格式化显示date/time类型和数值类型,参数format用于指定显示的格式,给予用户对格式更自由地控制,culture参数是可选的,用于指定显示的语言,该函数返回值的数据类型是NVARCHAR,如果格式转换失败,该函数返回NULL:

FORMAT ( value, format [, culture ] )

参数format使用#表示一个数值,参数 format 使用以下占位符来表示日期/时间的格式:

  • yyyy、MM、dd:表示年、月、日
  • hh:mm:ss fffffff:表示时、分、秒、毫秒
  • 使用“/”,“-”等作为连接各个部分(part)的分割符号

(1)把date/time格式化

在format参数中指定日期/时间显示的格式,以特定的格式: “yyyy:MMdd hh:mm:ss fffffff” 显式日期/时间,例如:

select format(SYSDATETIME(),'yyyy-MM-dd hh:mm:ss fffffff')

(2)转换数值类型

在参数format中使用#代表一个数字,使用相应的连接符,拼接成数字的格式字符,例如:

FORMAT(123456789,'###-##-####') AS 'Custom Number Result

二,日期和时间的结构

常用的日期的构成(datepart)是:year、month、day、hour、minute、second、ns、TZoffset(简写为 tz)

DATEPART ( datepart , date )
YEAR ( date )
MONTH ( date )
DAY ( date ) 

在实际的产品环境中,周、季度等都很有用途:

  • quarter:季度,取值范围是 1、2、3、4
  • week:周在年中的序数,取值范围是 1 - 53
  • dayofyear:天在年中的序数,取值范围是 1 - 366
  • weekday:天在一周中的序数,取值范围是 1 - 7

DATEPART()返回的datepart是int类型,如果想要返回字符类型,可以使用DATENAME()函数:

DATENAME ( datepart , date )

通过datepart来构造日期,常用的函数有:

DATEFROMPARTS ( year, month, day )
DATETIME2FROMPARTS ( year, month, day, hour, minute, seconds, fractions, precision )
DATETIMEOFFSETFROMPARTS ( year, month, day, hour, minute, seconds, fractions, hour_offset, minute_offset, precision )
TIMEFROMPARTS ( hour, minute, seconds, fractions, precision )

参数precision 是指小数秒的精度,指的是DateTime2(n)、DateTimeOffset(n),Time(n)中的n值,表示以多少位小数表示1s。

三,日期操作

日期函数:EOMonth、Format、DateAdd、DateDiff、SwitchOffset

1,月份的最后一天

函数 EOMonth() 返回指定日期的最后一天

EOMONTH ( start_date [, month_to_add ] )

参数注释:

  • start_date: 有两种输入方式,能够转换为Date的字符串类型 和 date 数据类型
  • month_to_add: 是int 类型,能够为正整数,负整数和0,默认值是0,如果省略,那么使用默认值0。

例如,查看当前月的最后一天、下一个月的最后一天、上一个月的最后一天:

declare @date date
set @date=getdate()

select EOMONTH(@date) as CurrentMonth_EndDay,
    EOMONTH(@date,1) as NextMonth_EndDay,
    EOMONTH(@date,-1) as LastMonth_EndDay

2,月份的第一天

使用DateFromParts() 函数,能够从3个正整数(year,month,day)中获取date 类型,只需要将day 参数设置1,就能获取月份的第一天的日期。

declare @date date
set @date=getdate()

select DATEFROMPARTS(year(@date),month(@date),1)

也可以使用Format() 函数, 以字符串形式返回月份的第一天,例如,获取当前月份的第一天:

FORMAT(GETDATE(),'yyyyMM01')

3,切换时区

把DateTimeOffset类型的数据切换到指定的时区,在转换过程中,UTC时间是固定的,依据固定的UTC时间,切换到特定时区的本地时间:

SWITCHOFFSET ( DATETIMEOFFSET, time_zone )

参数注释:

  • DATETIMEOFFSET:DateTimeOffset(n)类型的变量
  • time_zone:指定的目标时区数据,格式是  [+|-] hh:mm

使用SwitchOffset()函数把DateTimeOffset的时区偏移(Offset)切换到指定的时区中,例如,把本地时间的时区东八区切换到东七区:

DECLARE @remote DATETIMEOFFSET
DECLARE @local DATETIMEOFFSET
SET @local = SYSDATETIMEOFFSET()
SET @remote = SWITCHOFFSET (@local, '+07:00')
SELECT @remote AS remote_time,@local AS local_time

可以看到,东7区的时间比东8区的时间晚一个小时。

4,当前日期是周几

在SQL Server中,通过DataFirst选项设置一周的第一天,序数是从1到7,表示一周的7天。

SET DATEFIRST { number | @number_var }

(1)可以通过@@datefirst来获取设置的值

set DATEFIRST 1
select @@datefirst

(2)使用函数datepart函数获取当天是周几

set DATEFIRST 1
select datepart(WEEKDAY,getutcdate())

set DATEFIRST 2
--select @@datefirst
select datepart(WEEKDAY,getutcdate())

由于设置不同的DateFirst,会导致datepart返回不同的数值,所以必须借助@@DateFirst

set DATEFIRST 2
select Datepart(weekday, getdate()+@@datefirst - 1)

set DATEFIRST 1
select Datepart(weekday, getdate()+@@datefirst - 1)

4,使用DateName获取WeekDay的名字

WeekDay的名字跟系统的语言设置有管,跟DateFirst的设置没有关系

(1) 查看当前的语言设置

select @@language

(2) 查看系统支持的语言

select alias,name, *
from sys.syslanguages

(3) 设置语言

set LANGUAGE 'Simplified Chinese'
set LANGUAGE 'us_english'

(4) 使用DateName获取WeekDay的名字

set LANGUAGE 'Simplified Chinese'
select  DATENAME(WEEKDAY,getutcdate())

set LANGUAGE 'us_english'
select  DATENAME(WEEKDAY,getutcdate())

四. 日期函数

sqlserver_时间格式化_年月日

函数名称 参数 示例 说明

dateadd(日期部分,数字,日期)

select dateadd(year,45,'1990-12-11') 返回 2035-12-11 00:00:00.000
select dateadd(month,45,'1990-12-11') 返回 1994-09-11 00:00:00.000
select dateadd(mm,45,'1990-12-11') 返回 1994-09-11 00:00:00.000
select dateadd(qq,12,'1990-12-11') 返回 1993-12-11 00:00:00.000
select dateadd(hh,12,'1990-12-11') 返回 1990-12-11 12:00:00.000
select dateadd(yy,-12,'1990-12-11') 返回 1978-12-11 00:00:00.000

返回给指定日期加上一个时间间隔后的新的日期值。
数字:用于与指定的日期部分相加的值。如果指定了非整数值,则将舍弃该值的小数部分,舍弃时不遵循四舍五入。
日期:指定的原日期
在此函数中 :dw,dy,dd 效果一样都表示天

datediff(日期部分,开始日期,结束日期)

select datediff(yy,'1990-12-11','2008-9-10') 返回 18
selectdatediff(mm,'2007-12-11','2008-9-10') 返回 9

返回两个指定日期的指定日期部分的差的整数值。
在此函数中dw,dy,dd 效果一样都表示天

datename(日期部分,日期)

select datename(mm,'2007-12-11') 返回 12
select datename(dw,'2007-12-11') 返回星期二
select datename(dd, ‘2007-12-11') 返回 11
select datename(wk, ‘2007-12-11') – 50 一年中的第几个星期
select datename(dy, ‘2007-12-11') – 345 一年中的第几天
select DATENAME(YYYY,GETDATE()) + DATENAME(MM,GETDATE()) – 201803

返回表示指定日期的指定日期部分的字符串。

dw 表示一星期中星期几
wk 表示一年中的第几个星期
dy 表示一年中的第几天

datepart(日期部分,日期)

select datepart(mm,'2007-12-11')返回 12
select datepart(dw,'2007-12-11')返回 3
select datepart(dd, ‘2007-12-11')返回 11
select DATEPART(YYYY,GETDATE()) + DATENAME(MM,GETDATE()) – 2021

返回表示指定日期的指定日期部分的整数。

wk 表示一年中的第几个星期
dy 表示一年中的第几天,
dw 表示一星期中星期几,返回整数默认 1 为星期天

getdate()无参数

select getdate() 返回 2222-02-22 12:34:19.070

返回当前系统日期和时间。

getutcdate()无参数

select getutcdate() 返回2222-02-22 04:34:19.073

返回表示当前的UTC(世界标准时间)时间。即格林尼治时间(GMT)

1、上月的第一天

SELECT CONVERT(CHAR(10),DATEADD(month,-1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),111)

2、上月的最后一天

SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()),0)),111)+' 23:59:59'

3、本月的第一天

SELECT CONVERT(CHAR(10),DATEADD(dd,-DAY(GETDATE())+1,GETDATE()),111)

4、本月的最后一天

SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0)),111)+' 23:59:59'

5、来月的最后第一天

SELECT CONVERT(CHAR(10),DATEADD(m,1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),111)

6、来月的最后一天

SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+2,0)),111)+' 23:59:59'

日期部分  含义 :

缩写year年yy,yyyy
quarter季qq,q
month月mm, m
dayofyear天(请看函数中的说明)dy, y
day天(请看函数中的说明)dd, d
week星期wk, ww
weekday天(请看函数中的说明)dw, w
hour小时hh
minute分钟mi, n
second秒ss, s
millisecond毫秒ms

==================================================

Sql Server 查询指定范围(一周,一月,本周,本月等)内的数据

1.查询今日的所有数据

select * from 表名 where datediff(day,字段名,getdate())=0

2.查询昨日的所有数据

select * from 表名 where datediff(day,字段名,getdate()-1)=0

3.查询当天日期在一周前的数据

selcet * from 表名 where datediff(week,字段名,getdate()-1)=0

4.查询前30天的数据

select * from 表名 where datediff(d,字段名,getdate())<=30

5.查询上一个月的数据

select * from 表名 where datediff(m,字段名,getdate())<=1

6.查询当天的数据

select * from 表名 where datediff(dd,字段名,getdate())=0

7.查询24小时内的数据

select * from 表名 where datediff(hh,字段名,getdate())

8.查询本周的数据

select * from 表名 where datediff(week,字段名,getdate())=0

9.查询本月的数据

select * from 表名 where datediff(month,字段名,getdate())=0

10.查询本季的数据

select * from 表名 where datediff(qq,字段名,getdate())=0

到此这篇关于SQLServer日期函数总结案例详解的文章就介绍到这了,更多相关SQLServer日期函数总结内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SqlServer中的日期与时间函数

    一.Sql Server中的日期与时间函数 1. 当前系统日期.时间 select getdate() 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')

  • SQLserver中用convert函数转换日期格式的方法

    SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm 例如: select getdate() 整理了一下SQL Server里面可能经常会用到的日期格式转换方法: 举例如下: select CONVERT(varchar, getdate(), 120 ) 2004-09-12 11:06:08 select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-','

  • Sqlserver 常用日期时间函数

    MS SQL Server中文版的预设日期datetime格式是yyyy-mm-dd hh:mm:ss.mmm 长短日期格式 复制代码 代码如下: --短日期格式:yyyy-m-d SELECT REPLACE(CONVERT(varchar(10),getdate(),120),N'-0','-') --长日期格式:yyyy年mm月dd日 SELECT STUFF(STUFF(CONVERT(char(8),getdate(),112),5,0,N'年'),8,0,N'月')+N'日' --短

  • SQLServer 日期函数大全(小结)

    一.统计语句 1.--统计当前[>当天00点以后的数据] SELECT * FROM 表 WHERE CONVERT(Nvarchar, dateandtime, 111) = CONVERT(Nvarchar, GETDATE(), 111) ORDER BY dateandtime DESC 2.--统计本周 SELECT * FROM 表 WHERE datediff(week,[dateadd],getdate())=0 3.--统计本月 SELECT * FROM 表 WHERE da

  • SQLServer日期函数总结案例详解

    目录 一,日期的格式化 二,日期和时间的结构 三,日期操作 四. 日期函数 SQL Server发展至今,关于日期的格式的控制方法,有传统的方法,比如CONVERT(),也有比较便利的新方法,比如FORMAT():同样,关于日期的操作函数,也分为传统方法:DATEADD()等,也有便利的新方法:EOMonth()等. 一,日期的格式化 格式化是指把日期类型(Date).日期和时间类型转化为字符类型,通常使用CONVERT()和FORMAT()函数. 1,传统的CONVERT() SQL Serv

  • MySQL学习之日期函数的用法详解

    目录 获取 系统时间 函数 日期格式化 函数 日期函数练习① 日期函数练习② 日期计算的注意事项 日期偏移计算 计算日期之间相隔的天数 获取 系统时间 函数 “NOW()” 函数 能够获得当前系统日期和时间,格式如下:“YYYY-MM-DD hh:mm:ss” (这里的小时单位是 24 小时制) “CURDATE()” 函数 能够获取到当前系统的日期,格式如下:“YYYY-MM-DD” “CURTIME()” 函数 能够获得当前系统时间,格式如下:“hh:mm:ss” (24小时制) SELEC

  • C++ Invalidaterect()函数作用案例详解

    函数原型: BOOLInvalidateRect( HWND hWnd, // handle of window withchanged update region 窗口句柄. CONST RECT *lpRect, // address ofrectangle coordinates rect结构体的指针. BOOL bErase // erase-background flag 是否要发送WM_ERASEBKGND消息从而擦除原来的背景 ); 这个函数的作用是,使得Client的一个矩形区域

  • C++ seekg函数用法案例详解

    C++ seekg函数用法详解 很多时候用户可能会这样操作,打开一个文件,处理其中的所有数据,然后将文件倒回到开头,再次对它进行处理,但是这可能有点不同.例如,用户可能会要求程序在数据库中搜索某种类型的所有记录,当这些记录被找到时,用户又可能希望在数据库中搜索其他类型的所有记录. 文件流类提供了许多不同的成员函数,可以用来在文件中移动.其中的一个方法如下: seekg(offset, place); 这个输入流类的成员函数的名字 seekg 由两部分组成.首先是 seek(寻找)到文件中的某个地

  • StretchBlt函数和BitBlt函数用法案例详解

    StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像 一.StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩.也即是将内存中的位图拷贝到屏幕上,并且可以根据屏幕画图区的大小来进行伸缩,适应响应的屏幕(或图像控件) BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, in

  • C# DateTime日期比较方法案例详解

    之前做到日期时间的时候,有许多格式问题和日期时间比较问题,以及相关条件约束,因为不熟悉这个,浪费许多时间,查找相关资料,记录,以作备用. 1. Convert.ToDateTime       使用的是Windows控制模版中对日期格式的定义,可以使用Convert.ToDateTime("12-02-02").ToString("YYYY-MM-DD "); 或者Convert.ToDateTime("12-02-02").ToString(&

  • Python threading Local()函数用法案例详解

    目录 前言 local() 函数是什么? local()函数如何用? 1. 不做标记,不做隔离 2.使用local()函数加以控制 3. 模拟实现local()的功能,创建一个箱子 4. 简化代码操作,进一步模拟实现local()函数 总结 前言 当多线程访问同一个公共资源时,如果涉及到修改该公共资源的操作就可能会出现由于数据不同步导致的线程安全问题.一般情况下我们可以通过给公共资源加互斥锁的方式来处理该问题. 当然,除非必须将多线程使用的资源设置为公共资源的情况.如果一个资源不需要在多个线程之

  • C++ assert()函数用法案例详解

    1. 简介 assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行. 原型定义: #include <assert.h> void assert( int expression ); assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行.请看下面的程序清单badptr.c: #include <stdio.h> #incl

  • C++ atoi()函数用法案例详解

    目录 1 功能 2 格式 3 注意事项 3.1 关于参数的注意事项 3.2 关于返回值的注意事项 3.3 判断转换是否成功 4 宽字符的转换 1 功能 atoi()函数将数字格式的字符串转换为整数类型.例如,将字符串"12345"转换成数字12345. 2 格式 该函数的格式为 int atoi(const char* str) 其中,参数str是要转换的字符串,返回值是转换后的整数. 3 注意事项 3.1 关于参数的注意事项 在"2 格式"中提到,atoi()函数

  • C++ 转换函数用法案例详解

    1.标准数据之间会进行隐式类型安全转换,规则如下:  在这里主要探讨c++中类类型与普通类型的转换: 1.类类型转换普通类型 class Fraction { public: Fraction(int num,int den=1); ~Fraction(); //转换函数 /* 转换函数语法规则: operator Type() { Type ret ; ........ return ret; } */ operator double() const { return (double)(m_N

随机推荐