文件包含日期值“09-01-2015 14:30:00”。但导入到 oracle 表后,所有日期值显示为“20-01-19 3:12:15.00000 PM”

问题描述 投票:0回答:1
  • 我有一个 csv 文件,其中包含 2015-2022 年的日期和 5 分钟间隔日期格式的时间,格式为 09-01-2015 09:15:00+05:30
  • 我需要将日期格式 09-01-2015 09:15:00+05:30 更改为 09-01-2015 09:15:00
  • 因此,我将数据复制并粘贴到记事本++中,并从所有行中删除了所有 +05:30 并在 csv 文件中替换。
  • 格式变为DD-MM-YYYY HH:MI:SS(09-01-2015 09:15:00),然后将csv文件导入到oracle表中。导入时日期格式在 Excel 文件和 sql Developer 中均显示为 DD-MM-YYYY HH:MI:SS
  • 但是将数据导入表后,列值看起来像这样 '20-01-19 3:12:15.000000000 PM 15:11:05.000'。我不明白 sql 开发人员如何假定日期格式为。

尝试发现以下查询的问题:

  1. 尝试检查唯一的年份值。但表中的年份值本身是错误的。
select to_char(datetime,'YYYY') from table;
0031

我尝试了该列的日期和时间戳数据类型。

我不明白实际问题是在 csv 文件还是 SQL 开发人员中。任何人都可以帮助我吗?

  1. 原始 CSV 文件数据
日期时间
09-01-2015 14:30:00+05:30
09-01-2015 14:35:00+05:30
09-01-2015 14:40:00+05:30
09-01-2015 14:45:00+05:30
  1. 通过替换记事本++中的所有内容删除+05:30,然后导入到具有 TIMESTAMP 数据类型的表列中。在表中日期时间值显示为:
日期时间
20-01-09 3:14:30.000000000 PM
20-01-15 3:14:55.000000000 PM
20-01-15 3:15:00.000000000 PM
20-01-15 3:15:05.000000000 PM

3.

SELECT * FROM NLS_SESSION_PARAMETERS WHERE parameter LIKE 'NLS_%_FORMAT';
参数 价值
NLS_DATE_FORMAT DD-MM-RR
NLS_TIME_FORMAT HH12:MI:SSXFF 上午
NLS_TIMESTAMP_FORMAT DD-MM-RR fmHH12:fmMI:SSXFF AM
NLS_TIME_TZ_FORMAT HH12:MI:SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MM-RR fmHH12:fmMI:SSXFF AM TZR

4.通过数据导入向导导入在此输入图像描述

sql oracle oracle-sqldeveloper date-formatting
1个回答
0
投票

您的图像显示数据的格式为:

09-01-2015 14:30
09-01-2015 14:35
09-01-2015 14:40
09-01-2015 14:45

目标表格式为

YYYY-MM-DD HH24:MI:SS

如果您这样做,则这些不匹配:

SELECT TO_CHAR(
         TO_DATE(
           '09-01-2015 14:40',
           'YYYY-MM-DD HH24:MI:SS'
         ),
         'YYYY-MM-DD HH24:MI:SS'
       ) AS dt
FROM   DUAL;

那么输出是

0009-01-20 15:14:40
并且:

  • 日期已放入年份部分;
  • 世纪已被放入日期部分;
  • 世纪年份位于小时部分;
  • 小时位于分钟部分;
  • 分钟位于秒部分。

(除了月份,一切都错了!)

尝试将目标格式设置为

FXDD-MM-YYYY HH24:MI
FX
告诉它使用确切的格式)。

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.