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 ...
随机推荐
- [loj3146]路灯
显然,能从$l$到$r$当且仅当$[l,r)$中的灯全部都亮,以下不妨令询问的$r$全部减1 当修改节点$x$时,找到包含$x$的极大的灯(除$x$以外)全部都亮的区间$[l,r]$,即令$l_{0} ...
- 八、hive3.1.2 安装及其配置(本地模式和远程模式)
目录 前文 hive3.1.2 安装及其配置(本地模式和远程模式) 1.下载hive包 2.修改其环境变量 3.MySQL配置 Centos7 MySQL安装步骤: 1.设置MySQL源 2.安装My ...
- CreateProcess error=206, 文件名或扩展名太长。
改:
- IE 跨域设置
开发的时候会发现IE下跨域无法访问,报错: Failed to load resource: net::ERR_CONNECTION_REFUSED 解决方法有两种: 自己写代理服务,访问代理服务,代 ...
- CF1539F Strange Array
这玩意为啥是紫. 考虑对每个小于\(x\)的数值设为1,大于\(x\)的数值设为-1. 那么对于答案要求的就是绝对值最大的连续段. 线段树是很显然的. 考虑我们不能对每个数都进行一遍重构,这样就退化到 ...
- 洛谷 P4548 - [CTSC2006]歌唱王国(概率生成函数)
洛谷题面传送门 PGF 入门好题. 首先介绍一下 PGF 的基本概念.对于随机变量 \(X\),满足 \(X\) 的取值总是非负整数,我们即 \(P(v)\) 表示 \(X=v\) 的概率,那么我们定 ...
- P5509 派遣
题面传送门. 数论小杂烩( 由题意,对于每个士兵 \(i\),要么选,对答案产生 \(a_i(\frac{x}{i-x})\) 倍的贡献,要么不选,对答案产生 \(1\) 倍的贡献. 由此可知每个士兵 ...
- 【数据库】本地KEGG数据库如何拆分子库?
目录 KEGG本地库文件 按物种拆分KEGG数据库 1.获得物种分类信息 2.获得物种分类的序列信息并建库 3.获得物种分类的K-ko对应文件 根据相似性原理,序列相似,功能相似,所有功能注释无非是用 ...
- 如何使用csapp文件
深入理解操作系统中有个csapp.h的头文件 以下来介绍下如何使用它: 该头文件下载地址为http://download.csdn.net/detail/tzasd89812/4206284 在Ubu ...
- 用Rsync实现windows下同步linux服务器的数据
一:环境 1.服务端:Red Hat Enterprise Linux Server release 6.4 (Santiago) 2.客户端:windows7旗舰版64位 3.同步对象:测试数据 4 ...