Sql Server、Oracle、MySQL 日期格式化函数处理
Sql Server
CONVERT ( '取数长度' , '时间' , '类型')
查询对应时间: 2021-03-17T19:18:18.007
Select CONVERT(varchar(100), GETDATE(), 0) -- 03 17 2021 7:18PM
Select CONVERT(varchar(100), GETDATE(), 1) -- 03/17/21
Select CONVERT(varchar(100), GETDATE(), 2) -- 21.03.17
Select CONVERT(varchar(100), GETDATE(), 3) -- 2017-3-21
Select CONVERT(varchar(100), GETDATE(), 4) -- 17.03.21
Select CONVERT(varchar(100), GETDATE(), 5) -- 2017-3-21
Select CONVERT(varchar(100), GETDATE(), 6) -- 17 03 21
Select CONVERT(varchar(100), GETDATE(), 7) -- 03 17, 21
Select CONVERT(varchar(100), GETDATE(), 8) -- 19:18:18
Select CONVERT(varchar(100), GETDATE(), 9) -- 03 17 2021 7:18:18:007PM
Select CONVERT(varchar(100), GETDATE(), 10) -- 03-17-21
Select CONVERT(varchar(100), GETDATE(), 11) -- 2021-3-17
Select CONVERT(varchar(100), GETDATE(), 12) -- 210317
Select CONVERT(varchar(100), GETDATE(), 13) -- 17 03 2021 19:18:18:007
Select CONVERT(varchar(100), GETDATE(), 14) -- 19:18:18:007
Select CONVERT(varchar(100), GETDATE(), 20) -- 2021-3-17 19:18
Select CONVERT(varchar(100), GETDATE(), 21) -- 18:18.0
Select CONVERT(varchar(100), GETDATE(), 22) -- 03/17/21 7:18:18 PM
Select CONVERT(varchar(100), GETDATE(), 23) -- 2021-3-17
Select CONVERT(varchar(100), GETDATE(), 24) -- 19:18:18
Select CONVERT(varchar(100), GETDATE(), 25) -- 18:18.0
Select CONVERT(varchar(100), GETDATE(), 100) -- 03 17 2021 7:18PM
Select CONVERT(varchar(100), GETDATE(), 101) -- 03/17/2021
Select CONVERT(varchar(100), GETDATE(), 102) -- 2021.03.17
Select CONVERT(varchar(100), GETDATE(), 103) -- 17/03/2021
Select CONVERT(varchar(100), GETDATE(), 104) -- 17.03.2021
Select CONVERT(varchar(100), GETDATE(), 105) -- 17-03-2021
Select CONVERT(varchar(100), GETDATE(), 106) -- 17 03 2021
Select CONVERT(varchar(100), GETDATE(), 107) -- 03 17, 2021
Select CONVERT(varchar(100), GETDATE(), 108) -- 19:18:18
Select CONVERT(varchar(100), GETDATE(), 109) -- 03 17 2021 7:18:18:007PM
Select CONVERT(varchar(100), GETDATE(), 110) -- 03-17-2021
Select CONVERT(varchar(100), GETDATE(), 111) -- 2021-3-17
Select CONVERT(varchar(100), GETDATE(), 112) -- 20210317
Select CONVERT(varchar(100), GETDATE(), 113) -- 17 03 2021 19:18:18:007
Select CONVERT(varchar(100), GETDATE(), 114) -- 19:18:18:007
Select CONVERT(varchar(100), GETDATE(), 120) -- 2021-3-17 19:18
Select CONVERT(varchar(100), GETDATE(), 121) -- 18:18.0
Select CONVERT(varchar(100), GETDATE(), 126) -- 2021-03-17T19:18:18.007
Select CONVERT(varchar(100), GETDATE(), 130) -- 4 ????? 1442 7:18:18:007PM
Select CONVERT(varchar(100), GETDATE(), 131) -- 4/08/1442 7:18:18:007PM
Oracle
-- 字符串转时间类型
SELECT to_date(SYSDATE,'yyyy-mm-dd hh24:mi:ss') FROM dual;
-- 时间转指定格式字符串
SELECT to_char(SYSDATE,'yyyy"年"mm"月"dd"日"') FROM DUAL;
-- 年 季 月 日 取值
select to_char(sysdate,'yyyy') from dual; --年
select to_char(sysdate,'Q' from dual; --季
select to_char(sysdate,'mm') from dual; --月
select to_char(sysdate,'dd') from dual; --日
-- Oracle 时间
SELECT SYSDATE FROM dual; -- 系统时间
SELECT SYSTIMESTAMP FROM dual; -- 当前系统时间戳
SELECT CURRENT_TIMESTAMP FROM dual; -- 与时区设置有关,返回的秒是系统的,返回的日期和时间是根据时区转换过的
SELECT current_date FROM dual; -- 是对CURRENT_TIMESTAMP准确到秒的四舍五入
select TO_DATE('19700101','yyyymmdd') + 1235728935/86400 +TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24 from dual,其中1235728935就是unix/linux时间戳,转换完之后就表示为 2009-2-27 18:02:15。
反过来也一样,还是要考虑时区
select (to_date('2009-2-27 18:02:15','yyyy-mm-dd hh24:mi:ss') - to_date('1970-1-1','yyyy-mm-dd'))*86400- TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))*3600 from dual
-- 时间差计算
DECLARE
START_DATE DATE;
END_DATE DATE;
BEGIN
START_DATE := SYSDATE - 1 ;
END_DATE := SYSDATE ;
dbms_output.put_line('相差天数 :' || ROUND(TO_NUMBER(END_DATE - START_DATE)));
dbms_output.put_line('相差小时数 :' || ROUND(TO_NUMBER(END_DATE - START_DATE) * 24));
dbms_output.put_line('相差分钟数 :' || ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60));
dbms_output.put_line('相差秒数 :' || ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60));
dbms_output.put_line('相差毫秒数 :' || ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60 * 1000));
END;
-- 时间日期加减
select sysdate,add_months(sysdate,12) from dual; --加1年
select sysdate,add_months(sysdate,1) from dual; --加1月
select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期
select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual; --加1天
select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --加1小时
select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1分钟
select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1秒
--------------------------------------------------------------------------------------
select sysdate,add_months(sysdate,-12) from dual; --减1年
select sysdate,add_months(sysdate,-1) from dual; --减1月
select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual; --减1星期
select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual; --减1天
select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --减1小时
select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1分钟
select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1秒
MySql
select date_format(moment,'%Y%m%d %H:%i:%s')
* %S, %s 两位数字形式的秒( 00,01, . . ., 59)
* %i 两位数字形式的分( 00,01, . . ., 59)
* %H 两位数字形式的小时,24 小时(00,01, . . ., 23)
* %h, %I 两位数字形式的小时,12 小时(01,02, . . ., 12)
* %k 数字形式的小时,24 小时(0,1, . . ., 23)
* %l 数字形式的小时,12 小时(1, 2, . . ., 12)
* %T 24 小时的时间形式(h h : m m : s s)
* %r 12 小时的时间形式(hh:mm:ss AM 或hh:mm:ss PM)
* %p AM 或P M %W 一周中每一天的名称( S u n d a y, Monday, . . ., Saturday)
* %a 一周中每一天名称的缩写( Sun, Mon, . . ., Sat)
* %d 两位数字表示月中的天数( 00, 01, . . ., 31)
* %e 数字形式表示月中的天数( 1, 2, . . ., 31)
* %D 英文后缀表示月中的天数( 1st, 2nd, 3rd, . . .)
* %w 以数字形式表示周中的天数( 0 = S u n d a y, 1=Monday, . . ., 6=Saturday)
* %j 以三位数字表示年中的天数( 001, 002, . . ., 366)
* %U 周(0, 1, 52),其中Sunday 为周中的第一天
* %u 周(0, 1, 52),其中Monday 为周中的第一天
* %M 月名(J a n u a r y, February, . . ., December)
* %b 缩写的月名( J a n u a r y, February, . . ., December)
* %m 两位数字表示的月份( 01, 02, . . ., 12)
* %c 数字表示的月份( 1, 2, . . ., 12)
%Y 四位数字表示的年份
* %y 两位数字表示的年份 %% 直接值“%”
SELECT curdate(); -- 获取当前日期
select curtime(); -- 获取当前时间
select now(); -- 取得当前日期时间
除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数:
current_timestamp()
,current_timestamp
,localtime()
,localtime
,localtimestamp -- (v4.0.6)
,localtimestamp() -- (v4.0.6)
select sysdate(), sleep(3), sysdate(); -- now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。
select utc_timestamp(), utc_date(), utc_time(), now() -- 我国位于东八时区,所以本地时间 = UTC 时间 + 8 小时。UTC 时间在业务涉及多个国家和地区的时候,非常有用。
select date_sub(curdate(),interval 1 day); -- 取得前一天
date_sub()函数的例子:
select date_sub(curdate(),interval 1 day) 表示 2013-05-19
select date_sub(curdate(),interval -1 day) 表示 2013-05-21
select date_sub(curdate(),interval 1 month) 表示 2013-04-20
select date_sub(curdate(),interval -1 month) 表示 2013-06-20
select date_sub(curdate(),interval 1 year) 表示 2012-05-20
select date_sub(curdate(),interval -1 year) 表示 2014-05-20
MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数。
period_add(P,N):日期加/减去N月。P:“YYYYMM” 或者 “YYMM”,N” :增加或减去 N month(月)。只针对月
period_diff(P1,P2):日期 P1-P2,返回 N 个月。
select datediff('2008-08-08', '2008-08-01'); -- 7
select datediff('2008-08-01', '2008-08-08'); -- -7
1. 选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒
set @dt = '2008-09-10 07:15:30.123456';
select date(@dt); -- 2008-09-10
select time(@dt); -- 07:15:30.123456
select year(@dt); -- 2008
select quarter(@dt); -- 3
select month(@dt); -- 9
select week(@dt); -- 36
select day(@dt); -- 10
select hour(@dt); -- 7
select minute(@dt); -- 15
select second(@dt); -- 30
select microsecond(@dt); -- 123456
2. MySQL Extract() 函数,可以上面实现类似的功能:
set @dt = '2008-09-10 07:15:30.123456';
select extract(year from @dt); -- 2008
select extract(quarter from @dt); -- 3
select extract(month from @dt); -- 9
select extract(week from @dt); -- 36
select extract(day from @dt); -- 10
select extract(hour from @dt); -- 7
select extract(minute from @dt); -- 15
select extract(second from @dt); -- 30
select extract(microsecond from @dt); -- 123456
select extract(year_month from @dt); -- 200809
select extract(day_hour from @dt); -- 1007
select extract(day_minute from @dt); -- 100715
select extract(day_second from @dt); -- 10071530
select extract(day_microsecond from @dt); -- 10071530123456
select extract(hour_minute from @dt); -- 715
select extract(hour_second from @dt); -- 71530
select extract(hour_microsecond from @dt); -- 71530123456
select extract(minute_second from @dt); -- 1530
select extract(minute_microsecond from @dt); -- 1530123456
select extract(second_microsecond from @dt); -- 30123456
3. 函数:dayofweek(), dayofmonth(), dayofyear()
分别返回日期参数,在一周、一月、一年中的第几天。
set @dt = '2008-08-08';
select dayofweek(@dt); -- 6
select dayofmonth(@dt); -- 8
select dayofyear(@dt); -- 221
函数:week(), weekofyear(), dayofweek(), weekday(), yearweek()
set @dt = '2008-08-08';
select week(@dt); -- 31 位于一年中的第几周
select week(@dt,3); -- 32 位于一年中的第几周
select weekofyear(@dt); -- 32 位于一年中的第几周
select dayofweek(@dt); -- 6 (1 = Sunday, 2 = Monday, ..., 7 = Saturday)
select weekday(@dt); -- 4 (0 = Monday, 1 = Tuesday, ..., 6 = Sunday)
select yearweek(@dt); -- 200831
MySQL week() 函数,可以有两个参数,具体可看手册。 weekofyear() 和 week() 一样,都是计算“某天”是位于一年中的第几周。 weekofyear(@dt) 等价于 week(@dt,3)。
MySQL weekday() 函数和 dayofweek() 类似,都是返回“某天”在一周中的位置。不同点在于参考的标准, weekday:(0 = Monday, 1 = Tuesday, ..., 6 = Sunday); dayofweek:(1 = Sunday, 2 = Monday, ..., 7 = Saturday)
4. last_day() 函数:返回月份中的最后一天。
select last_day('2008-02-01'); -- 2008-02-29
5. 函数:dayname(), monthname() 返回星期和月份名称
set @dt = '2008-08-08';
select dayname(@dt); -- Friday
select monthname(@dt); -- August
6. date_add() 日期增加一个时间间隔
date_sub 日期减去一个时间间隔
set @dt = now();
select date_add(@dt, interval 1 day); -- add 1 day
select date_add(@dt, interval 1 hour); -- add 1 hour
select date_add(@dt, interval 1 minute); -- ...
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year);
select date_add(@dt, interval -1 day); -- sub 1 day select date_sub(@dt, interval 1 day);
select date_add(@dt, interval '01:15:30' hour_second); --增加了“1小时 15分 30秒
select date_add(@dt, interval '1 01:15:30' day_second); --增加了“1天 1小时 15分 30秒”
1. MySQL (时间、秒)转换函数:time_to_sec(time), sec_to_time(seconds)
select time_to_sec('01:00:05'); -- 3605
select sec_to_time(3605); -- '01:00:05'
2. MySQL (日期、天数)转换函数:to_days(date), from_days(days)
select to_days('0000-00-00'); -- 0
select to_days('2008-08-08'); -- 733627
select from_days(0); -- '0000-00-00'
select from_days(733627); -- '2008-08-08'
3. MySQL Str to Date (字符串转换为日期)函数:str_to_date(str, format)
select str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09
select str_to_date('08/09/08' , '%m/%d/%y'); -- 2008-08-09
select str_to_date('08.09.2008', '%m.%d.%Y'); -- 2008-08-09
select str_to_date('08:09:30', '%h:%i:%s'); -- 08:09:30
select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); -- 2008-08-09 08:09:30
4. MySQL 拼凑日期、时间函数:makdedate(year,dayofyear), maketime(hour,minute,second)
select makedate(2001,31); -- '2001-01-31'
select makedate(2001,32); -- '2001-02-01'
select maketime(12,15,30); -- '12:15:30'
Sql Server、Oracle、MySQL 日期格式化函数处理的更多相关文章
- SQL Server中的日期格式化
SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm 例如: select getdate() 2004-09-12 11:06:08 ...
- MySql 日期格式化函数date_format()
mysql> select date_format(now(),'%Y'); +-------------------------+ | date_format(now(),'%Y') | +- ...
- Sql Server 日期格式化函数
Sql Server 中一个非常强大的日期格式化函数Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVE ...
- Sql Server 中一个非常强大的日期格式化函数
Sql Server 中一个非常强大的日期格式化函数Select CONVERT(varchar(100), GETDATE(), 0)-- 05 16 2006 10:57AMSelect CONV ...
- [转]sql server 数据库日期格式化函数
转至:http://www.cnblogs.com/hantianwei/archive/2009/12/03/1616148.html 0 或 100 (*) 默认值 mon ...
- SQL Server 函数之日期格式化函数
SQL Server 函数之日期格式化函数 高文龙关注0人评论612人阅读2017-09-23 13:47:07 SQL Server 函数之日期格式化函数 对于一些经常写SQL Server执行语句 ...
- 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析
对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...
- SQL GETDATE()日期格式化函数
Sql Server 中一个非常强大的日期格式化函数 Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONV ...
- SQL 日期格式化函数
Sql Server 中一个非常强大的日期格式化函数: 获得当前系统时间,GETDATE(): 2008年01月08日 星期二 14:59 Select CONVERT(varchar(100), G ...
随机推荐
- 微信小程序的优点(水一篇)
- 快速的加载 - 更强大的能力 - 原生的体验 - 易用且安全的微信数据开放 - 高效和简单的开发 摘自微信官方文档 https://developers.weixin.qq.com/minipro ...
- java8两个字段进行排序问题
//这个解决问题 Comparator<Anjianxinxi> getLianriqi = Comparator.comparing(Anjianxinxi::getLianriqi). ...
- 学习 DDD 之消化知识!
接触到DDD到现在已经有8个月份了,目前所维护的项目也是基于DDD的思想开发的,从一开始的无从下手,到现在游刃有余,学到不少东西,但是都是一些关键字和零散的知识,同时我也感受到了是因为我对项目越来越熟 ...
- [NOI2020] 制作菜品
看懂题目是生产第一要素. 考虑\(m = n - 1\)则必定有解.我们每次选择最小的和最大的拼在一起即可. 当\(m\)大于\(n\),那么我们只要每次选择最大的给他消掉即可. \(m = n - ...
- 走向深蓝:那些 Linshey 不会的算法
网络流 树论: Algorithm Round-1 Round-2 Algorithm Round-1 Round-2 点分治 \(\checkmark\) 边分治 \(\checkmark\) 动态 ...
- DTOJ 4030: 排列计数
[题目描述] 求有多少个1到n的排列满足恰有$k$对在排列中相邻的数满足前小于后,答案对2012取模. [输入] 一行2个正整数$n,k$. [输出] 输出一个整数表示答案. [样例输入] 5 2 ...
- DTOJ 4027:挖煤
挖煤 [问题描述]众所周知, 小C是挖煤好手.今天他带着他的魔法镐子去挖煤 ,他的镐子一开始有$w$点魔力.他的挖煤 路线 上会依次 经过$n$个地点, 地点, 每个 地点是煤矿或者补给站,设小C当前 ...
- Linux运维工程师面试题整理
1. Nginx 反向代理,负载均衡,动静分离,工作原理及优化nginx配置反向代理. vim Nginx.confServer模块中配置Listen 80Server_name ip;在server ...
- R连接mysql数据库方法详解
Warning messages: 1: In odbcDriverConnect("DSN=Rdata;UID=root") : [RODBC] ERROR: state IM0 ...
- LearnPython_week4
1.装饰器2.生成器3.迭代器4.内置方法5.可序列化6.项目规范化 1.装饰器 # -*- coding:utf-8 -*- # Author:Wong Du ### 原代码 def home(): ...