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"

SQL Date 时间类型处理的更多相关文章

  1. javascript 关于Date 时间类型 处理方法

    上一篇博客中和大家分享了关于 字符串转时间类型 这一篇顺便整理下 javascript 中 Date 类型的一些方法 var time = new Date(); var year=time.getY ...

  2. 将某个日期字符串转换为java.sql.Date的类型

    import java.text.ParseException; import java.text.SimpleDateFormat; public class date { /** * @param ...

  3. SQL Server时间类型datetime

    SQL Server时间类型datetime 兼容ADO的COleDateTime. SQL datetime 日期和时间数据,可表示1753.1.1 至 9999.12.31的时间,精度为1/300 ...

  4. PL/SQL 日期时间类型函数及运算

    内部存储格式: 世纪.年.月.日.小时.分钟.秒 默认格式是:DD-MON-RR. SYSDATE 返回当前的系统时间. SELECT SYSDATE FROM DUAL: 对日期的数学运算 SELE ...

  5. sql date时间加减几天几小时

    //时间转成年月日时分秒select date_format(now(),'%Y%m%d%H%i%S')//时间转成年月日select date_format(now(),'%Y%m%d')//去年此 ...

  6. @InitBinder 前端传递date时间类型属性时,转换错误问题

    在Controller里加上这段代码 @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomE ...

  7. Javaweb学习笔记——(十七)——————JDBC的原理、四大核心类、四大参数、预编译、Dao模式、批处理、大数据、时间类型的转换

    JDBC入门 *导入jar包:驱动 *加载驱动类:Class.forName("类名"); *给出url.username.password,其中url背下来 *使用DriverM ...

  8. 1 Java中的时间类型

    总结:sql中的时间转 util的时间直接赋值即可:反过来,必须先吧util下的时间转换成毫秒,再通过sql的构造器生成sql的时间格式. 1 Java中的时间类型 java.sql包下给出三个与数据 ...

  9. JDBC入门(5)--- 时间类型、大数据

    一.时间类型 数据库类型与Java中类型的对应关系: DATE->java.sql.Date:表示日期,只有年月日,没有时分秒,会丢失时间. TIME->java.sql.Time:表示时 ...

随机推荐

  1. Linux磁盘分区/格式化/挂载目录

    分区及挂载目录 以CentOS7.2为例,一般我们服务端应用部署前需要确认部署机的磁盘空间及挂载目录.操作如下: 如上图,如果操作系统是新装的,未挂盘的话需要先挂载盘.操作如下: fdisk -l # ...

  2. jmeter中websocket接口测试

    一.Websocket协议简介 Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说: HTTP协议: HTTP的生命周期通过 Request 来界定,也就是一个 Request  ...

  3. php导出百万数据到csv

    <?php set_time_limit(0); // 设置超时 ini_set('memory_limit', '100M'); // 设置最大使用的内存 header("Conte ...

  4. odoo10学习笔记五:高级视图

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189279.html 树视图 tree视图表现出来是列表视图,列表中一行一纪录.可以根据每行纪录的某字段值 ...

  5. jmeter压测学习3-提取json数据里面的token参数关联

    前言 现在很多接口的登录是返回一个json数据,token值在返回的json里面,在jmeter里面也可以直接提取json里面的值. 上一个接口返回的token作为下个接口的入参. 案例场景 我现在有 ...

  6. 201871010134-周英杰《面向对象程序设计(java)》第十三周学习总结

    201871010134-周英杰<面向对象程序设计(java)>第十三周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  7. Git命令行操作(三)

    1. 本地库初始化 进入指定目录,如:D:\gitSpace\OA 右键-->Git Bash Here,执行命令: git init 效果如下: #查看.git目录 ls -la # 进入.g ...

  8. zz姚班天才少年鬲融凭非凸优化研究成果获得斯隆研究奖

    姚班天才少年鬲融凭非凸优化研究成果获得斯隆研究奖 近日,美国艾尔弗·斯隆基金会(The Alfred P. Sloan Foundation)公布了2019年斯隆研究奖(Sloan Research ...

  9. Mybatis中的@Param注解(自己没试过)

    @Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应//https ...

  10. 【oracle】迁表结构和数据

    背景:把一些表和数据从某库迁到另一个库 1.命令框: exp yktsh/yktsh_2019@orcl30 file=d:\yktsh20191201.dmp log=d:\daochu; exp ...