zoukankan      html  css  js  c++  java
  • SQL Date 时间类型处理

    SQL 日期(Dates)   2019-10-17 22:17:26

            当我们处理日期时,最难的任务恐怕是确保插入的日期的格式,与数据库中日期列的格式相匹配。

            保存的如果是日期部分,查询不会有太大问题。但是如果涉及到时间部分,情况就有点复杂了。

            下面我们先看看内建日期处理函数


    SQL Server Date函数

    下面列举出了SQL Server中最重要的内建日期函数:

    1、GETDATE()  返回当前日期和时间

         语法:

    GETDATE()

         下面是SELECT语句:

    SELECT GETDATE() AS DateTime

          结果如下所示:

     注释:上面的时间是精确到毫秒。

     2、DATEPART() 返回日期/时间的单独部分

          语法:

    DATEPART(datepart,date)

    date参数是合法的日期表达式。datepart参数可以是下列的值:

    datepart 缩写
    yy,yyyy
    季度 qq,q
    mm,m
    年中的日 dy,y
    dd,d
    wk,ww
    星期 dw,w
    小时 hh
    分钟 mi,n
    ss,s
    毫秒 ms
    微秒 mcs
    纳秒 ns

          实例:

    select datepart(yy,getdate());

    3、DATEADD() 在日期中添加或减去指定的时间间隔

          语法:

    DATEADD(datepart,number,date)

    date参数是合法的日期表达式。number是您希望添加的间隔数;对于未来日期,次数是正数,对于过去的时间,次数是负数。

    datepart参数值跟上面列举的参数值一致,在此我就不复制一份了

          实例:

    select DATEADD(day,30,GETDATE());

          结果:

    4、DATEDIFF() 返回两个日期之间的时间

          语法:

    DATEDIFF(datepart,startdate,enddate)
    startdate和enddate 参数是合法的日期表达式。datepart参数跟上面列举的一样

    实例:
    select DATEDIFF(day,'2019-10-17','2020-1-24');

           结果:

    5、CONVART() 用不同的格式显示日期/时间

           语法:

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

           

    下面的表格展示了datetime或smalldatetime转换为字符数据的style值:

     值(世纪yy)  值(世纪yyyy) 输入/输出   标准
     -  0 or 100  mon dd yyyy hh:miAM(or PM)  Default
     1  101  mm/dd/yy  USA
     2  102  yy.mm.dd  ANSI
     3  103 dd/mm/yy  British/French 
     4  104  dd.mm.yy  German 
     5  105  dd-mm-yy  ltalian 
     6  106  dd mon yy   
     7  107  Mon dd,yy   
     8  108  hh:mm:ss   
     -  9 or 109   mon dd yyyy hh:mi:ss:mmmAM(or PM)  Default+millisec 
     10  110   mm-dd-yy  USA 
     11  111  yy/mm/dd  Japan 
     12  112  yymmdd  ISO 
     -  13 or 113  dd mon yyyy hh:mi:ss:mmm(24h)   
     14  114  hh:mi:ss:mmm(24h)  
     - 20 or 120  yyyy-mm-dd hh:mi:ss(24h)   
     - 21 or 121  yyyy-mm-dd hh:mi:ss.mmm(24h)   
     -  126 yyyy-mm-ddThh:mi:ss.mmm(no spaces) ISO8601 
     -  130  dd mon yyyy hh:mi:ss:mmmAM Hijiri 
     - 131  dd/mm/yy hh:mi:ss:mmmAM  Hijiri 

             实例:

         下面的脚本使用CONVERT()函数来显示不同的格式。使用GETDATE()函数来获取当前的日期/时间

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

       

    结果如下所示:

    Nov 04 2011 11:45 PM
    11-04-11
    11-04-2011
    04 Nov 11
    04 Nov 2011
    04 Nov 2011 11:45:34:243

    PostgreSQL 时间/日期函数和操作符

    在 postgre中一些特定的时间,数字可以进行基本操作符 加+ 减- 乘* 除/ 操作

    日期/时间操作符

    操作符 例子 结果
    + select date '2019-10-18' +integer '7' date '2019-10-25'
    + select date '2019-10-18' + interval '1 hour' timestamp '2019-10-18 01:00:00'
    + select date '2019-10-18' + time '03:00' timestamp '2019-10-18 03:00:00'
    + select interval '1 day' + interval '1 hour' interval '1 day 01:00:00'
    + select timestamp '2019-10-18 01:00' + interval '23 hours' timestamp '2019-10-19 00:00:00'
    + select time '01:00' + interval '3 hours' time '04:00:00'
    - - interval '23 hours' interval -23:00:00
    - select date '2019-10-18' - date '2019-10-15' intrger 3(days)
    - select date '2019-10-18' - integer '7' date '2019-10-11'
    - date '2001-09-28' - interval '1 hour' timestamp '2019-10-17 23:00:00'
    - time '05:00' - time '03:00' interval '02:00:00'
    - time '05:00' - interval '2 hours' time '03:00:00'
    - select timestamp '2019-10-18 23:00' - interval '23 hours' timestamp '2019-10-18 00:00:00'
    - select interval '1 day' - interval '1 hour' interval '1 day -01:00:00'
    - timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' interval '2 days 15:00:00'
    * 900 * interval '1 second' interval '00:15:00'
    * select 21 * interval '1 day' interval '21 days'
    * select double precision '3.5' * interval '1 hour' interval '03:30:00'
    / interval '1 hour' / double precision '1.5' interval '00:40:00'

    日期/时间函数

     函数  返回类型  描述  例子 结果 
     age(timestamptimestamp)  interval 减去参数后的"符号化"结果,使用年和月,不只是使用天  select age(timestamp '2019-10-18', timestamp '1998-07-31')  "21 years 2 mons 18 days"
     age(timestamp)  interval  从current_date减去参数后的结果(在午夜)  select age(timestamp '1998-07-31')  "21 years 2 mons 18 days"
    clock_timestamp()  timestamp with time zone  实时时钟的当前时间戳(在语句执行时变化)  select clock_timestamp()  "2019-10-18 21:47:03.880667+08"
    current_date  date  当前的日期;  select current_date  "2019-10-18"
    current_time time with time zone 当前的时间;  select current_time "21:50:35.168911+08:00"
    current_timestamp  timestamp with time zone  当前事务开始时的时间戳; select current_timestamp  "2019-10-18 21:49:17.912353+08"
     date_part(texttimestamp)  double precision  获取子域(等效于extract);  date_part('hour', timestamp '2001-02-16 20:38:40')  22
     date_part(textinterval)  double precision  获取子域(等效于extract);  date_part('month', interval '2 years 3 months')  3
     date_trunc(texttimestamp)  timestamp  截断成指定的精度;  select date_trunc('hour', timestamp '2019-10-18 22:55:40') "2019-10-18 22:00:00"
     date_trunc(textinterval)  interval  截取指定的精度,  date_trunc('hour', interval '2 days 3 hours 40 minutes')  "2 days 03:00:00"
     extract(field from timestamp)  double precision  获取子域; select extract(hour from timestamp '2019-10-18 22:58:40')  "22"
     extract(field from interval)  double precision  获取子域;  select extract(month from interval '2 years 3 months')  "3"
     isfinite(date)  boolean  测试是否为有穷日期(不是 +/-无穷)  select isfinite(date '2019-10-18')  true
     isfinite(timestamp)  boolean  测试是否为有穷时间戳(不是 +/-无穷)  select isfinite(timestamp '2001-02-16 21:28:30')  true
     isfinite(interval)  boolean  测试是否为有穷时间间隔  select isfinite(interval '4 hours')  true
     justify_days(interval)  interval  按照每月 30 天调整时间间隔  select justify_days(interval '35 days')  "1 mon 5 days"
     justify_hours(interval)  interval  按照每天 24 小时调整时间间隔  select justify_hours(interval '27 hours')  "1 day 03:00:00"
     justify_interval(interval)  interval  使用justify_daysjustify_hours调整时间间隔的同时进行正负号调整  select justify_interval(interval '1 mon -1 hour')  "29 days 23:00:00"
     localtime  time  当日时间;   select localtime  "22:29:47.906458"
     localtimestamp  timestamp  当前事务开始时的时间戳;  select localtimestamp  "2019-10-18 22:30:51.573436"
    make_date(year intmonth intday int) date 为年、月和日字段创建日期 make_date(2013, 7, 15) 2013-07-15
    now() timestamp with time zone 当前事务开始时的时间戳; select now() "2019-10-18 22:33:19.559465+08"
    statement_timestamp()
    timestamp with time zone
    实时时钟的当前时间戳; statement_timestamp() "2019-10-18 22:34:50.077578+08"
    timeofday() text clock_timestamp相同,但结果是一个text 字符串; select timeofday() "Fri Oct 18 22:35:41.196317 2019 HKT"
    transaction_timestamp() timestamp with time zone 当前事务开始时的时间戳; select transaction_timestamp() "2019-10-18 22:36:42.310184+08"


     

  • 相关阅读:
    type为number的input标签输入小数的方法
    魔兽争霸3作弊码
    pom.xml 添加 JUnit依赖
    缺失 import org.apache.commons.fileupload.FileUploadException; 包
    使用WebMvcConfigurerAdapter 做登录,失效的一个小小原因
    Missing session attribute 'user' of type List 解决办法
    @RequestMapping 和 @GetMapping @PostMapping 区别
    thymeleaf模板对没有结束符的HTML5标签解析出错的解决办法
    Thymeleaf 模板 引用头部 尾部 最简单教程
    IDEA 如何弹出Select classes to import
  • 原文地址:https://www.cnblogs.com/ljknlb/p/11695359.html
Copyright © 2011-2022 走看看