zoukankan      html  css  js  c++  java
  • SQL Server时间日期

    日期时间

    时间日期类型

    • date 日期格式的类型,默认的字面量格式 YYYY-MM-DD。
    INSERT INTO account values(12,'zhx','1997-10-1')
    
    • datetime 带有日期和时间,时间格式的字符串自动转换为datetime。
    INSERT INTO account values(12,'zhx','1997-10-1 12:23:34')
    
    • datetime2 对datetime的拓展,有着更大的范围和更大的精度和用户可以指定的精度。默认的字面量格式为:YYYY-MM-DD hh:mm:ss[.fractional seconds] 。
    INSERT INTO account(birthday) values('2017-09-01 22:22:10')
    
    • datetimeoffset 由日期时间加上偏移量组成。时区偏移量指定某个 time 或 datetime 值相对于 UTC 的时区偏移量。时区偏移量可以表示为 [+|-] hh:mm。hh 是两位数,范围为 00 到 14,表示时区偏移量中的小时数。mm 是两位数,范围为 00 到 59,表示时区偏移量中的额外分钟数。默认的字面量格式为:YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]。
    INSERT INTO account(birthday) values('2017-08-09 12:23:34 +12:12')
    
    • time 定义一天中的某个时间。此时间不能感知时区且基于 24 小时制。默认字面量格式为:hh:mm:ss[.nnnnnnn]。
    INSERT INTO account(eattime) values('23:12:34');
    

    日期函数

    • 获取当前日期和时间:GETDATE(),返回内型datetime。
    • 获取年份:YEAR(date),返回日期对应年份,返回int类型。date是一个可以解析为 time、date、smalldatetime、datetime、datetime2 或 datetimeoffset 值的表达式。date 参数可以是表达式、列表达式、用户定义变量或字符串文字。
    • 获取月份:MONTH(date),返回日期对应的月份,返回int类型。参数同上。
    • 获取天数:DAY(date),返回日期对应的天数,返回int类型。参数同上
    • 获取任意时间部分,DATEPART ( datepart , date ),返回int类型。date同上,datepart解析如下。
    说明 取值
    返回年度信息 Year、YYYY、YY
    返回月份信息 Month、MM、M
    返回日期信息 Day、DD、D
    返回周信息 Week、WK、WW
    返回每周星期几信息,返回值取决于使用SET DATEFIRST设置的值。在我的电脑上测试周日的值为1 WeekDay、DW
    返回季度信息 Quarter、QQ、Q
    返回一年中第几天的信息 DayOfYear、DY、Y
    返回小时信息 Hour、HH
    返回分钟信息 Minute、MI、N
    返回秒信息 Second、SS、SS
    返回毫秒信息 MillSecond、MS
    SELECT DATEPART(YY,'2017-09-12') // 2017
    SELECT DATEPART(M,'2017-09-12')  // 9
    SELECT DATEPART(dw) // 3 当天是星期二,系统默认一周的开始为星期天,所以星期日的值为1
    
    • 获取时间日期指定部分的字符串:DATENAME ( datepart , date ),返回nvarchar。date参数同上。
    SELECT DATENAME(YY,'2017-09-12')  // 2017
    SELECT DATENAME(dw,'2017-09-12')  // Tuesday
    
    • 日期加法:DATEADD (datepart , number , date ),返回结果为date + number,返回 datetime2 类型。datepart是与 number相加的date部分,见上表。number是一个表达式,可以解析为与date的 datepart相加的int,用户定义的变量是有效的,如果您指定一个带小数的值,则将小数截去且不进行舍入。date同上。
    SELECT DATEADD (YY , 2 , '2017-09-12' )  // 2019-09-12 00:00:00.000
    SELECT DATEADD (DW , 2 , '2017-09-12' )  // 2017-09-14 00:00:00.000
    SELECT DATEADD (M , 3 , '2017-09-12' )  // 2017-12-12 00:00:00.000
    
    • 日期减法:DATEDIFF ( datepart , startdate , enddate ),返回的结果为:enddate - startdate,返回int类型。datepart指定相减的类型,见上表;startdate同上;enddate同上。
    SELECT DATEDIFF ( YY , '2017-09-10' , '2018-09-23' )  // 1
    SELECT DATEDIFF ( DW , '2017-09-10' , '2018-09-23' )  // 378
    SELECT DATEDIFF ( DD , '2017-09-10' , '2018-09-23' )  // 378
    
    • 字符串转日期
    select CONVERT(datetime,'2017-11-23 12:34:44') optime;
    select CAST('2010-07-25T13:50:38.544' AS datetime) optime;
    

    语法

    CONVERT ( data_type [ ( length ) ] , expression [ , style ] );
    CAST ( expression AS data_type [ ( length ) ] );
    

    日期运算

    select CONVERT(datetime,'2017-11-23 12:00:00',120) + 5  optime; //2017-11-28 12:00:00.000
    

    日期类型的默认值为1900-01-01 00:00:00.000,即可以认为日期类型的“零”值为1900-01-01 00:00:00.000。所以任何一个日期类型的数据加上值为1900-01-01 00:00:00.000的日期类型数据相当于加的是0,即值不变。若加的值不为“零”,则相当于加上该值与“零”值之间的差的天数,然后该差值再做加法。

    select CONVERT(datetime,'2017-11-22 12:00:00',120) +  CONVERT(datetime,'1900-01-01 12:00:00',120); //2017-11-23 00:00:00.000
    
    select CONVERT(datetime,'2017-11-22 12:00:00',120) +  CONVERT(datetime,'2000-01-01 12:00:00',120);//2117-11-23 00:00:00.000
    
    select CONVERT(datetime,'2017-11-23 12:00:00',120) - 10  optime; //2017-11-13 12:00:00.000
    

    日期类型的默认值为1900-01-01 00:00:00.000,即可以认为日期类型的“零”值为1900-01-01 00:00:00.000。日期类型相减相当于减数与被减数之间天数之差,该差值再加上日期的“零”值。

    select CONVERT(datetime,'2017-11-23 12:00:00',120) - CONVERT(datetime,'2017-11-23 12:00:00',120)  optime; //1900-01-01 00:00:00.000
    
    select CONVERT(datetime,'2017-11-23 12:00:00',120) - CONVERT(datetime,'2017-11-22 12:00:00',120)  optime; //1900-01-02 00:00:00.000
    
    select CONVERT(datetime,'2017-11-22 12:00:00',120) - CONVERT(datetime,'2017-11-23 12:00:00',120)  optime; //1899-12-31 00:00:00.000
    
    select CONVERT(datetime,'2017-11-22 12:00:00',120) - CONVERT(datetime,'2010-11-23 12:00:00',120)  optime; //1907-01-01 00:00:00.000
    
    • 日期类型不能做乘除法。

    常用日期SQL

    • 获取一个月的第一天:
    SELECT DATEADD(mm, DATEDIFF(mm,0,GETDATE()), 0)
    

    参考

    1.data-types-transact-sql
    2.cast-and-convert-transact-sql

  • 相关阅读:
    网络安全分析
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1540 机器
    java实现 洛谷 P1540 机器
  • 原文地址:https://www.cnblogs.com/ZiYangZhou/p/8179675.html
Copyright © 2011-2022 走看看