2016-08-15 70 views
0

在问这个问题之前已经做了很多搜索,如How to convert a string into date formatHow to convert a string into date,但还是无法弄清楚。Oracle:如何将字符串转换为日期格式

所以,这里的问题,如何将这些字符串日期转换成日期Oracle

“2016年8月15日10时45分30秒”(字符串类型) - > 20160815(日期型)

“20160815104530”(字符串类型) - > 20160815(日期型)

任何想法将不胜感激。

+0

你想保留时间部分吗?因为Oracle的DATE类型支持日期+时间。 – sstan

+0

我还应该提到,您链接的帖子不适用于Oracle。你不能指望在SQL Server或Excel的帖子中找到Oracle有用的信息。为什么不去源呢? [TO_DATE官方文档](https://docs.oracle.com/database/121/SQLRF/functions219.htm#SQLRF06132) – sstan

+0

我只想得到日期,没有时间部分需要 – triffic

回答

1

您在这里混合了两两件事:

首先是一个字符串数据类型的转换,在Oracle VARCHAR2DATE数据类型。 DATE数据类型的精度为秒,你不能改变它。 A DATE数据类型将始终为您提供日期和时间组件,即年,月,日,小时,分和秒:Oracle SQL Data Type Documentation

但是,您所要求的第二部分是关于如何格式化日期检索。这在运行报表或其他类型的日期显示时很有用。例如,在美国,您最希望您的日期列以MM/DD/YYYY的格式显示,而世界上其他任何地方最有可能想要使用DD/MM/YYYY。 Oracle通过告诉它你想使用什么​​来实现这一点。您可以为每个单独的会话以及数据库级别设置该参数,由您(和您的DBA)决定何时何地设置该参数。在你的情况下,你可以通过ALTER SESSION命令申请:

SQL> ALTER SESSION SET nls_date_format='YYYY-MM-DD'; 

Session altered. 

SQL> SELECT TO_DATE('2016-08-15 10:45:30', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; 

TO_DATE(
---------- 
2016-08-15 

SQL> SELECT TO_DATE('20160815104530', 'YYYYMMDDHH24MISS') FROM DUAL; 

TO_DATE(
---------- 
2016-08-15 
+0

谢谢,这对我来说很清楚。 – triffic

1

您使用to_date()

select to_date(substr(str1, 1, 10), 'YYYY-MM-DD') 
select to_date(substr(str2, 1, 8), 'YYYYMMDD') 
+0

谢谢,但是它显示出来了:'' 2016-08-15 00:00:00'什么时候执行'select to_date(substr(str2,1,8),'YYYYMMDD')',我怎么才能根据'YYYYMMDD'的格式得到日期? – triffic

+0

@triffic。 。使用'to_char()'。在Oracle中,'date'类型也包含时间。 –

相关问题