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

String Oracle:如何将字符串转换为日期格式,string,oracle,date,String,Oracle,Date,在问这个问题之前,我已经做了很多搜索,比如,但仍然无法找到答案 因此,这里有一个问题,如何在Oracle中将这些字符串日期转换为日期: “2016-08-15 10:45:30”(字符串类型)->20160815(日期类型) “20160815104530”(字符串类型)->20160815(日期类型) 如果您有任何想法,我们将不胜感激。您可以使用来更新() 您可以使用来指定日期(): 你在这里混合了两件事: 第一个是将Oracle中的字符串数据类型VARCHAR2转换为DATE数据类型。 DA

在问这个问题之前,我已经做了很多搜索,比如,但仍然无法找到答案

因此,这里有一个问题,如何在
Oracle
中将这些字符串日期转换为日期:

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

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

如果您有任何想法,我们将不胜感激。

您可以使用
来更新()

您可以使用
来指定日期()


你在这里混合了两件事:

第一个是将Oracle中的字符串数据类型
VARCHAR2
转换为
DATE
数据类型。
DATE
数据类型的精度为秒,不能更改。
DATE
数据类型将始终为您提供日期和时间组件,即年、月、日、时、分和秒:

但是,您要问的第二部分是关于如何在检索时格式化日期。这在运行报告或其他类型的日期可视化显示时非常有用。例如,在美国,您很可能希望您的日期列以
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

你在这里混合了两件事:

第一个是将Oracle中的字符串数据类型
VARCHAR2
转换为
DATE
数据类型。
DATE
数据类型的精度为秒,不能更改。
DATE
数据类型将始终为您提供日期和时间组件,即年、月、日、时、分和秒:

但是,您要问的第二部分是关于如何在检索时格式化日期。这在运行报告或其他类型的日期可视化显示时非常有用。例如,在美国,您很可能希望您的日期列以
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

是否要保留时间部分?因为Oracle的日期类型确实支持日期+时间。我还应该指出,您链接到的帖子不适用于Oracle。您不能期望在针对SQL Server或Excel的帖子中找到Oracle有用的信息。为什么不去源头呢?我只想得到日期,不需要时间段你想保留时间段吗?因为Oracle的日期类型确实支持日期+时间。我还应该指出,您链接到的帖子不适用于Oracle。您不能期望在针对SQL Server或Excel的帖子中找到Oracle有用的信息。为什么不去源头呢?我只想获取日期,不需要时间部分谢谢,但它会显示:
2016-08-15 00:00:00
当执行
选择to_date(substr(str2,1,8),'yyyyymmdd')
时,我如何根据
YYYYMMDD
的格式获取日期?@triffic。使用
来\u char()
。在Oracle中,
date
类型也包括时间。谢谢,但它会显示:
2016-08-15 00:00:00
当执行
选择to_date(substr(str2,1,8),'yyyyyymmdd')
时,我如何根据
YYYYMMDD
的格式获取日期?@triffic。使用
来\u char()
。在Oracle中,
date
类型也包括时间。