【问题标题】:How to convert date string to date in oracleoracle中如何将日期字符串转换为日期
【发布时间】:2017-06-16 11:42:20
【问题描述】:

Screenshot of query executed 'Sat Oct 29 10:47:50 CDT 2016' 中的日期字符串必须在 oracle 查询中转换为日期/时间戳格式。我只需要从中提取日期和时间。我尝试使用 to_date() 但没有用。有人可以帮忙吗?

错误: ORA-01841: (完整)年份必须介于 -4713 和 +9999 之间,而不是 0 01841. 00000 - “(完整)年份必须介于 -4713 和 +9999 之间,并且不能为 0” *原因:非法输入年份 *Action:在指定范围内输入年份

【问题讨论】:

  • 请发布您使用的to_date() 语法。您使用了哪种格式? docs.oracle.com/cd/B19306_01/server.102/b14200/…
  • 请在问题中说明你是如何使用to_date函数的?
  • @Wernfried 如果您有解决方案,请提供解决方案。我什至从未使用过 Oracle,因此无法测试我的答案。
  • Order_date 具有上述收到的订单时间戳的字符串格式,查询为 -- select to_date(order_date ,'YYYY-MM-DD HH24:MI:SS') from table_name where rownum

标签: string oracle date


【解决方案1】:

试试这个:

SELECT TO_DATE(
   REGEXP_REPLACE('Sat Oct 29 10:47:50 CDT 2016', '^\w+ (\w+ \d+ \d{2}:\d{2}:\d{2}).+(\d{4})', '\1 \2'), 
      'Mon DD HH24:MI:SS YYYY')
FROM DUAL

数据类型DATETIMESTAMP不支持任何时区信息,您必须先删除这部分才能进行转换。

【讨论】:

  • 这仅从中提取日期,我们还需要从中提取时间.. DB 列的日期存储为“Sat Oct 29 10:47:50 CDT 2016”字符串格式,我们需要通过查询字符串列来拉取 15 分钟/30 分钟间隔之间的记录
  • 不,它还读取HH24:MI:SS 的时间。检查您当前会话的NLS_DATE_FORMAT 设置。
  • 是的.."HH24:MI:SS" 这读取时间,但不知何故,输出没有返回时间,它只显示。 NLS_DATE_FORMAT 是“DD-MON-RR”我不知道这对查询输出有何影响?查询截图 [i.stack.imgur.com/YZOz2.png]
  • NLS_DATE_FORMAT 定义了DATE 值的默认输出格式。更改它(例如改为yyyy-mm-dd hh24:mi:ss)或通过TO_CHAR(TO_DATE(REGEXP_REPLACE(...., 'yyyy-mm-dd hh24:mi:ss')明确定义输出格式
猜你喜欢
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
相关资源
最近更新 更多