最常用的用法就是将字符串转化为timestamp类型的日期
如果小时大于12,就认为是24小时时间格式,需要用HH24,否则会报错,如下
SELECT SYSDATE,TO_DATE('2019-03-20 23:14:12','YYYY-MM-DD HH24:MI:SS') FROM DUAL;
执行结果如下:
需要注意的是, 由于是转化为timestamp类型,所以我们看到的结果格式都是和系统日期保持一致,YYYY-MM-DD HH24:MI:SS
只是起到解析前面字符串的作用,YYYY、MM、DD、HH24、MI、SS
分别对应年、月、日、时、分、秒
,只可多匹配不可少匹配。
下面的写法都正确
SELECT SYSDATE,TO_DATE('2019-3-20','YYYY-MM-DD HH24:MI:SS') FROM DUAL;
SELECT SYSDATE,TO_DATE('20190320231412','YYYYMMDDHH24MISS') FROM DUAL;
SELECT SYSDATE,TO_DATE('2019 03 20 23 14 12','YYYY-MM-DD HH24:MI:SS') FROM DUAL;
SELECT SYSDATE,TO_DATE('20190320','YYYYMMDDHH24MISS') FROM DUAL;
SELECT SYSDATE,TO_DATE('2019-03-20','YYYY/MM/DD') FROM DUAL;
SELECT SYSDATE,TO_DATE('20190320','YYYY-MM-DD') FROM DUAL;
to_char()函数的作用是将数字或时间转化为指定格式的字符串
语法格式如下:
TO_CHAR(n:NUMBER [, fmt:VARCHAR, nlsparam:VARCHAR]])
该函数将NUMBER类型的n按数值格式fmt转换成VARCHAR2类型的值。'nlsparams'用来指定小数点和千分位分隔符以及货币的符号,如下:
'NLS_NUMERIC_CHARACTERS=., NLS_CURRENCY=¥ NLS_ISO_CURRENCY=CNY'
NLS_NUMERIC_CHARACTERS=.,
表示指定小数位分隔符为.
千分位分隔符为,
NLS_CURRENCY=¥
表示指定本地货币符号为¥
NLS_ISO_CURRENCY=CNY
表示指定ISO货币符号为CNY
下面给出各种转换情况的实例
SELECT TO_CHAR(0.456,'0.9999') FROM DUAL; -- 结果:' 0.4560' 前有一个空格
SELECT TO_CHAR(0.456,'9.9999') FROM DUAL; -- 结果:' .4560' 前有一个空格
SELECT TO_CHAR(0.456,'0.99') FROM DUAL; -- 结果:' 0.46' 前有一个空格,发生了四舍五入
-- 用FM来去除前后无用的空格和0
SELECT TO_CHAR(0.456,'FM0.9999') FROM DUAL; -- 结果:'0.456'
TO_CHAR(3333333333.66666,'FM9,999,999,999.99999') --结果:'3,333,333,333.66666'
TO_CHAR(3333333333.66666,'FM9G999G999G999D99999') --结果:'3,333,333,333.66666'
// 下面自定义千分位与小数位的符号
TO_CHAR(3333333333.66666,'FM9G999G999G999D99999','NLS_NUMERIC_CHARACTERS=+-') --结果: '3-333-333-333+66666'
$:TO_CHAR(0.345,'FM$90.999') --结果:'$0.345'
L:本地货币符号,TO_CHAR(37,'L99') --结果:'¥37',即NLS_CURRENCY的值
// 自定义本地货币符号:TO_CHAR(37,'L99','NLS_CURRENCY=$') --结果:'$37
C':ISO货币符号,TO_CHAR(22,'FMC99') --结果:'ANY22',即NLS_ISO_CURRENCY的值
// 自定义ISO货币符号:TO_CHAR(22,'FMC99','NLS_ISO_CURRENCY=USD') --结果:'USD22'
TO_CHAR(-222,'999MI') --结果:'222-'
TO_CHAR(222,'S999') --结果:'+222'
TO_CHAR(222,'999S') --结果:'222+'
TO_CHAR(-222,'999PR') --结果:'<222>'
TO_CHAR(-222,'999PR') --结果:' 222 '
TO_CHAR(22,'99V9999') --结果:' 220000'
TO_CHAR(121.976,'99.99EEEE') --结果:' 1.22E+02'
TO_CHAR(5,'FMrm') --结果:'v'
TO_CHAR(5,'FMRM') --结果:'V'
首先得清楚日期格式参数的含义:
YEAR:年,英文拼写,如2019为TWENTY NINETEEN
IYYY: ISO标准的四位年份
YYYY: 四位年份
YYY: 年份的最后三位
YY: 年份的最后两位
Y: 年份的最后一位
Q:季度(1, 2, 3, 4)
MM: 月,例子:05
Mon: 月份的简写,例子:5月
Month: 同Mon
RM:罗马数字月
W: 该月的第几个星期
WW: 该年中的第几个星期
IW: ISO标准的年中的第几周
D: 一周中的星期几,注意星期天是第一天
DAY: 当天是星期几
DY: 同DAY
DD:该月中的第几天
DDD:该年中的第几天
HH: 小时,按12小时计
HH24: 小时,按24小时计
MI: 分
SS: 秒
SSSSS:当天零点到现在经过的秒数
SSxFF: 毫秒
FM:前缀,可以在参数前面,会去掉前后无用的空格和0
例如to_char(sysdate, 'MM')结果是05,如果加上FM变成to_char(sysdate, 'FMMM'),结果就是5
to_char()将日期date转化为VARCHAR2字符串的语法格式如下:
to_char({datetime:TIMESTAMP | intervval:INTERVAL} [,fmt:VARCHAR [, nlsparam:VARCHAR]])
format缺省日期格式为Oracle的缺省日期格式(NLS_DATE_FORMAT)。
结果字符串的大小写风格:可以用Year,year,YEAR,Mon等这类format字符串控制。
分隔符:-
(中杠)/
(斜杠),
(逗号).
(句点);
(分号):
(冒号)等。
可以使用引号""
来指定任何文本作为分隔符。
nlsparams指定返回字符串所使用的语言,可以修改session的NLS_DATE_LANGUAGE
改变其缺省值。
修改方法:alter session set NLS_DATE_LANGUAGE='AMERICAN'
如果不使用默认值,可使用如下格式:'NLS_DATE_LANGUAGE=language'
下面是例子展示:
TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') --结果:'2019-05-20 16:18:41'
TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS AM') --结果:'2019-05-20 04:24:41 下午'
TO_CHAR(SYSDATE,'YYYY-MM-DD AD') --结果:'2019-05-20 公元'
TO_CHAR(SYSDATE,'CC') --结果:'21'
TO_CHAR(SYSDATE,'SCC') --结果:' 21'
// 获取当前月份
TO_CHAR(SYSDATE,'D') -- 结果: '2'
// 获取当前是星期几
TO_CHAR(SYSDATE,'DAY') -- 结果: '星期一'
// 获取当前季度
TO_CHAR(SYSDATE,'Q') -- 结果:'2' 表示第二季度
// 返回当前时间年月日小时分秒毫秒
TO_CHAR(CURRENT_TIMESTAMP(5),'YYYY-MM-DD HH24:MI:SSXFF') -- 结果:'2019-05-20 08:41:10.64257'
//--返回当前时间的秒毫秒,可以指定秒后面的精度(最大=9)
TO_CHAR(CURRENT_TIMESTAMP(9),'MI:SSXFF') -- 结果:'42:09.382861000'
上面只给出少量例子,可以根据不同的日期格式参数得到更多时间信息
方式1: SELECT SYSDATE,SYSDATE - 1/24/12 FROM DUAL;
方式2: SELECT SYSDATE,SYSDATE - INTERVAL '5' MINUTE FROM DUAL;
获取当前时间减去5小时的时间
方式1: SELECT SYSDATE,SYSDATE - 1/24*5 FROM DUAL;
方式2: SELECT SYSDATE,SYSDATE - INTERVAL '5' HOUR FROM DUAL;
获取当前时间减去5天的时间
方式1: SELECT SYSDATE,SYSDATE - 1*5 FROM DUAL;
方式2: SELECT SYSDATE,SYSDATE - INTERVAL '5' DAY FROM DUAL;
获取当前时间减去一周的时间
方式1: SELECT SYSDATE,SYSDATE - 7 FROM DUAL;
方式2: SELECT SYSDATE,SYSDATE - 7*INTERVAL '1' DAY FROM DUAL;
获取当前时间减去5个月的时间
方式1: 不能用
方式2: SELECT SYSDATE,SYSDATE - INTERVAL '5' MONTH FROM DUAL;
获取当前时间减去5年的时间
方式1: 不能用
方式2: SELECT SYSDATE,SYSDATE - INTERVAL '5' YEAR FROM DUAL;
作者:帅气滴糟老头
链接:https://www.jianshu.com/p/d80611da06e7
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。