关于orcale sql中的to_char()和to_date()方法

本文深入探讨Oracle数据库中的TO_DATE与TO_CHAR函数用法。TO_DATE用于将字符串转换为日期格式,详细解析了格式模板如YYYY、MM、DD等的使用,并展示了如何处理缺失的时间组件。同时,介绍了TO_CHAR函数的使用方法,用于将日期转换为字符串格式。文章还讲解了如何利用NLS_DATE_LANGUAGE参数指定日期和月份名称的语言。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TO_DATE()方法

首先从在网上看到别人to_date()方法的使用如下:

SELECT TO_DATE('2006-05-01 19:25:34', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL
//结果:2006/5/1 19:25:34
SELECT TO_DATE('2006-05-01 19:25', 'YYYY-MM-DD HH24:MI') FROM DUAL
//结果:2006/5/1 19:25:00
SELECT TO_DATE('2006-05-01 19', 'YYYY-MM-DD HH24') FROM DUAL
//结果:2006/5/1 19:00:00
SELECT TO_DATE('2006-05-01', 'YYYY-MM-DD') FROM DUAL
//结果:2006/5/1
SELECT TO_DATE('2006-05', 'YYYY-MM') FROM DUAL
//结果:2006/5/1
SELECT TO_DATE('2006', 'YYYY') FROM DUAL
//结果:2006/3/1

测试之后发现的确能够使用。
而我也发现了一个有趣的问题。
1、第二和第三条语句没有SS或MI,但在对应的位置会自动添加上00
2、第五和第六两条语句没有DD或MM,但在DD的位置自动添加上了1,在MM位置为查询时的系统月份。
结论:当转换模版存在HH时,如果MI或SS缺失则会补上00;当转换模版存在YYYY,如果MM缺失则会补上当前系统月份,DD缺失则会补上1。
值得说明的是TO_DATE()方法的第二个参数是时间的格式化模版,分别如下:

模版字符代表值
YYYY
MM
DD
HH小时(12小时制)
HH24小时(24小时制)
MI分钟
SS

此时我就在想YYYY代表年,是指年一定要4位数吗?还是说YYY也可以代表年于是我觉得测试一下:

SELECT TO_DATE('2006', 'YYY') FROM DUAL

结果显示:
在这里插入图片描述
之后我又测试了当日期只有一个数字时即将“2016-05”修改为“2016-5”时使用模版“YYYY-M”来转换也报同样的错误。

之后我查阅资料发现其实是可以使用“YYY”和“YY”,“Y”的,只不过转换的字符位数也要和模版位数一致。
他们代表的其实是:

模版字符代表值
YYY年后三位
YYYY比较复杂,大家观察下面的代码自己体会一下
Y年后一位
SELECT TO_DATE('6', 'Y') FROM DUAL
SELECT TO_DATE('16', 'YY') FROM DUAL
SELECT TO_DATE('016', 'YYY') FROM DUAL
//结果都为:2016/3/1
SELECT TO_DATE('2016', 'YY') FROM DUAL
//结果:2016/3/1
SELECT TO_DATE('016', 'YY') FROM DUAL
//结果:0016/3/1
SELECT TO_DATE('6', 'YY') FROM DUAL
//结果:2006/3/1
SELECT TO_DATE('0', 'YY') FROM DUAL
//结果:2000/3/1

最后我在plsql中找到了TO_DATE()函数的模版。
在这里插入图片描述
双击模版发现出现的代码有三个参数:

To_date(char, format, nlsparam)

第一个和第二个参数是什么我们都已经知道了:
char:需要转换的字符;
format:字符转date格式化模版;

那么第三个参数是什么呢?
nlsparam:?

查阅资料发现nlsparam其实是一个表达式,用于指定日期和月份名称的语言,且不是必须的参数。该参数的格式如下:NLS_DATE_LANGUAGE = language
通过这个参数我们能做什么呢?看下面的代码:

SELECT TO_DATE('January 15, 1989, 11:00 A.M.','Month dd, YYYY, HH:MI A.M.','NLS_DATE_LANGUAGE = American') FROM DUAL;
//结果:1989/1/15 16:00:00

通过nlsparam参数我们转换字符串为日期型格式就不仅限于阿拉伯数字的字符串了,还能使用不同的语言来实现。

SELECT TO_DATE('1月 15, 1989, 11:00','Month dd, YYYY, HH:MI','NLS_DATE_LANGUAGE = ''SIMPLIFIED CHINESE''') FROM DUAL;
//结果:1989/1/15 11:00:00

NLS_DATE_LANGUAGE = ‘‘SIMPLIFIED CHINESE’’,NLS_DATE_LANGUAGE的值为’‘SIMPLIFIED CHINESE’‘时表示为中文,有意思的是这里的两组单引号’’’'是不能省略的。而英文的American却不需要引号。

TO_CHAR()方法

该方法的内容我在网上看到一篇非常详细的博客连接如下:Oracle to_char函数的使用方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值