【问题标题】:SQL: Convert varchar to dateSQL:将 varchar 转换为日期
【发布时间】:2019-12-20 01:21:05
【问题描述】:

我有以下需要转换为日期的 varchar 类型变量:

2019-07-24T13:52:04

当我执行以下选择时:

SELECT TO_CHAR(TO_DATE(createddt,'YYYY-MM-DD T HH:MM:SS'), 'YYYY-MM-DD T HH:MM:SS')
FROM tbl$orders;

它给了我一个错误信息:

日期格式无法识别。

如何将此 varchar 转换为日期?

【问题讨论】:

  • 'YYYY-MM-DD T HH:MM:SS' 更改为 'YYYY-MM-DDTHH:MM:SS'。为什么要转换为日期而不是格式相同的字符?

标签: sql oracle date type-conversion varchar


【解决方案1】:

我推测您正在使用 Oracle,因为它具有 to_date(),而在 Oracle 中,date 数据类型具有时间组件。

然后就可以了:

select to_date('2019-07-24T13:52:04', 'YYYY-MM-DD"T"HH24:MI:SS')
from dual;

【讨论】:

  • 你的输出中没有 T。
  • @user11913918 。 . .我不知道你指的是什么。这是将指定的字符串转换为日期。
  • ibb.co/8myjBvf 看,你的输出中没有字母 T。
  • “您的输出中没有 T。” 这是因为 "T" 不是标准 Oracle 日期格式的一部分。查询的输出将采用 Oracle 日期格式,所以如果你想要一个 T,你必须要求它:alter session set nls_date_format = 'YYYY-MM-DD"T"HH24:MI:SS';
【解决方案2】:

这就是你要找的东西

SELECT TO_DATE(REPLACE('2019-07-24T13:52:04', 'T', ' '), 'YYYY-MM-DD HH24:MI:SS')
FROM Dual;

【讨论】:

  • 你的输出中没有 T。
  • @user11913918 你说 "Convert varchar to date" 那是ISO 8601 它已经是 ISO 8601 格式了。
【解决方案3】:

实际上,Oracle 中的日期格式是由NLS_DATE_FORMAT 定义的,您需要根据自己的需要进行设置。

您看不到字母 T,因为您的 NLS_DATE_FORMAT 不是这样设置的。

您可以尝试以下示例来解决您的问题:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS'; -- setting the date format to be displayed at the session level

SELECT
    TO_DATE('2019-07-24T13:52:04', 'YYYY-MM-DD"T"HH24:MI:SS')
FROM
    DUAL; -- Your query

另外,请阅读 oracle 文档中有关 NLS_DATE_FORMAT 的信息。确实需要了解日期是如何存储的以及它在 oracle 中是如何显示的。

干杯!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多