如何将特定格式的DATETIME转换为PL / SQL中的DATE

时间:2018-01-10 05:59:18

标签: oracle plsql

我为提出一个简单的问题而道歉,但我在论坛上找不到答案。 我需要从这个日期时间'2009-06-18T00:00:00 + 06:00'转换为在PL / SQL中格式化'YYYY-MM-DD'。

4 个答案:

答案 0 :(得分:2)

如果这是" datetime"实际上是一个时间戳(看起来像),而不是一个字符串,然后你可以选择如何显示它(使用TO_CHAR)或转换为DATE(使用TO_DATE),或者只是截断它。请注意,最后两个结果(即它们的显示方式)取决于当前的NLS设置(由我的ALTER SESSION设置)。

以下是一个例子:

SQL> alter session set nls_date_format = 'dd.mm.yyyy';

Session altered.

SQL> with test
  2       as (select to_timestamp_tz ('2009-06-18T00:00:00+06:00',
  3                                   'yyyy-mm-dd"t"hh24:mi:ss tzh:tzm')
  4                     col
  5             from dual)
  6  select to_char (col, 'yyyy-mm-dd') res1,
  7         to_date (to_char (col, 'yyyy-mm-dd'), 'yyyy-mm-dd') res2,
  8         trunc (col) res3
  9    from test;

RES1       RES2       RES3
---------- ---------- ----------
2009-06-18 18.06.2009 18.06.2009

SQL>

答案 1 :(得分:1)

对时间戳字符串中的前10个字符使用TO_DATE

SELECT TO_DATE(SUBSTR('2009-06-18T00:00:00+06:00', 1, 10), 'YYYY-MM-DD') FROM dual

Demo

答案 2 :(得分:0)

文档是最好的部分。

http://www.sqlines.com/oracle-to-sql-server/to_date

您可以使用TO_DATE(string, format)函数,因此它就像

SELECT TO_DATE('2012-06-05', 'YYYY-MM-DD') FROM xyz;

答案 3 :(得分:0)

取决于数据类型。

如果列是DATE数据类型,那么,如已经建议的那样,TRUNC将执行作业显示。但是,如果您的特定于语言环境的NLS日期设置不同,那么您仍会将时间部分视为午夜。

否则,您需要使用适当的FORMAT使用TO_DATE并对其应用TRUNC。

更新

如果您只想显示,请使用TO_CHAR,否则,如果您的WHERE子句中有过滤器,那么请记住TO_CHAR不会返回DATE,而是将其转换为文字。