Oracle:如何将字符串转换为日期格式

时间:2016-08-15 03:00:03

标签: string oracle date

在提出这个问题之前做了很多搜索,例如How to convert a string into date formatHow to convert a string into date,但仍然无法弄清楚。

所以,问题是如何将这些字符串日期转换为Oracle中的日期:

  

" 2016-08-15 10:45:30" (字符串类型) - > 20160815(日期类型)

     

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

任何想法都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

您使用to_date()

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

答案 1 :(得分:1)

你在这里混合两件事:

第一种是将Oracle VARCHAR2中的String数据类型转换为DATE数据类型。 DATE数据类型的精度为秒,您无法更改。 DATE数据类型将始终为您提供日期和时间组件,即年,月,日,小时,分钟和秒:Oracle SQL Data Type Documentation

但是,您要问的第二部分是关于如何格式化检索日期。这在运行报告或其他类型的日期可视化显示时很有用。例如,在美国,您很可能希望您的日期列以MM/DD/YYYY格式显示,而世界上其他任何地方您最有可能想要使用DD/MM/YYYY。 Oracle允许您通过告诉它要使用的NLS_DATE_FORMAT来做到这一点。您可以为每个单独的会话以及数据库级别设置该参数,由您(和您的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