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(timestamp, timestamp) | 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(text, timestamp) | double precision | 获取子域(等效于extract ); |
date_part('hour', timestamp '2001-02-16 20:38:40') | 22 |
date_part(text, interval) | double precision | 获取子域(等效于extract ); |
date_part('month', interval '2 years 3 months') | 3 |
date_trunc(text, timestamp) | timestamp | 截断成指定的精度; | select date_trunc('hour', timestamp '2019-10-18 22:55:40') | "2019-10-18 22:00:00" |
date_trunc(text, interval) | 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_days 和justify_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 int, month int, day 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 时间类型处理的更多相关文章
- javascript 关于Date 时间类型 处理方法
上一篇博客中和大家分享了关于 字符串转时间类型 这一篇顺便整理下 javascript 中 Date 类型的一些方法 var time = new Date(); var year=time.getY ...
- 将某个日期字符串转换为java.sql.Date的类型
import java.text.ParseException; import java.text.SimpleDateFormat; public class date { /** * @param ...
- SQL Server时间类型datetime
SQL Server时间类型datetime 兼容ADO的COleDateTime. SQL datetime 日期和时间数据,可表示1753.1.1 至 9999.12.31的时间,精度为1/300 ...
- PL/SQL 日期时间类型函数及运算
内部存储格式: 世纪.年.月.日.小时.分钟.秒 默认格式是:DD-MON-RR. SYSDATE 返回当前的系统时间. SELECT SYSDATE FROM DUAL: 对日期的数学运算 SELE ...
- sql date时间加减几天几小时
//时间转成年月日时分秒select date_format(now(),'%Y%m%d%H%i%S')//时间转成年月日select date_format(now(),'%Y%m%d')//去年此 ...
- @InitBinder 前端传递date时间类型属性时,转换错误问题
在Controller里加上这段代码 @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomE ...
- Javaweb学习笔记——(十七)——————JDBC的原理、四大核心类、四大参数、预编译、Dao模式、批处理、大数据、时间类型的转换
JDBC入门 *导入jar包:驱动 *加载驱动类:Class.forName("类名"); *给出url.username.password,其中url背下来 *使用DriverM ...
- 1 Java中的时间类型
总结:sql中的时间转 util的时间直接赋值即可:反过来,必须先吧util下的时间转换成毫秒,再通过sql的构造器生成sql的时间格式. 1 Java中的时间类型 java.sql包下给出三个与数据 ...
- JDBC入门(5)--- 时间类型、大数据
一.时间类型 数据库类型与Java中类型的对应关系: DATE->java.sql.Date:表示日期,只有年月日,没有时分秒,会丢失时间. TIME->java.sql.Time:表示时 ...
随机推荐
- Mongodb基础 学习小结
MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能 ...
- CSS的四种基本选择器和四种高级选择器
做个快乐的搬运工:https://blog.csdn.net/DYD850804/article/details/80997251
- JAVA基础复习day-01
1.基础语法 1.1.基础语法规则 1.1.1.Java代码实现 代码示例: public class Hello{ public static void main(String[] args){ S ...
- c# 第19节 Arraylist数组
本节内容: 1:ArrayList是什么 2:ArrayList数组的添加 3:ArrayList的方法 4:ArrayList 的删除 4:ArrayList 的遍历与查找 1:ArrayList是 ...
- 201871010124-王生涛《面向对象程序设计(java)》第十四周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...
- 201871010136—赵艳强《面向对象程序设计(java)》第十三周学习总结
201871010136—赵艳强<面向对象程序设计(java)>第十三周学习总结 博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https:// ...
- Excel-信息函数&数组公式
1.IS系列函数-逻辑函数 is函数是一个逻辑函数,可以用来判断一些特定的内容 Istext判断单元格是否是文本 Isnumber判断单元格是否为数值 Istext和isnumber的判断的结果相反 ...
- 关于js的<、>、=、<=、>=的比较
判断两个值的大小的时候.需要先转换为同一类型.比如parseInt转换. 示例:if(a<b) if(parseInt(a)<parseInt(b)) 后一种方式不容易出错.
- 使用arthas 生成火焰图分析jvm
arthas 是阿里巴巴开源的强大的jvm 应该分析工具,以下是使用arthas 生成jvm 火焰图的一个学习 项目使用docker-compose 运行,对于生成的火焰图使用nginx 提供一个访问 ...
- 4.Go-结构体、结构体指针和方法
4.1.结构体 结构体:将一个或多个变量组合到一起形成新的类型,这个类型就是结构体,结构体是值类型 定义结构体和赋值 //Learn_Go/main.go package main import &q ...