Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无法识别Ora-01821日期格式_Sql_Oracle_Date_To Date - Fatal编程技术网

Sql 无法识别Ora-01821日期格式

Sql 无法识别Ora-01821日期格式,sql,oracle,date,to-date,Sql,Oracle,Date,To Date,我想将字符串更改为日期字段,但在执行以下查询时收到错误ora-01821 date format not RECORGED。我还需要数据库中的am/pm。如何实现这一点 update bucket set closed = to_date(closed_on,'dd-mon-yy hh.mi.ss.ff a.m') 关闭的值将类似于19年5月29日09.01.16.00000000 PM我想您要使用时间戳-日期无法存储毫秒,因此它不理解FF select to_timestamp('29-M

我想将字符串更改为日期字段,但在执行以下查询时收到错误ora-01821 date format not RECORGED。我还需要数据库中的am/pm。如何实现这一点

update bucket set closed = to_date(closed_on,'dd-mon-yy hh.mi.ss.ff a.m')

关闭的值将类似于19年5月29日09.01.16.00000000 PM

我想您要使用时间戳-日期无法存储毫秒,因此它不理解FF

select  to_timestamp('29-MAY-19 09.01.16.00000000 PM','dd-mon-yy hh.mi.ss.FF8 AM') from dual
请注意,正如GMB所指出的,您无法让oracle解析
a.m
——您必须将其设置为
a.m.
am
。没有半途而废:)(希望这是一个复制错误)

如果您非常想使用to_DATE,请缩短毫秒数:

select 
  to_date(
    SUBSTR('29-MAY-19 09.01.16.00000000 PM', 1, 18) || SUBSTR('29-MAY-19 09.01.16.00000000 PM', -2, 2),
    'dd-mon-yy hh.mi.ssAM'
  ) 
from dual
如果您的时间序列是
a.m.
让第二个子序列使用
,-4,4)
-“从右开始,左4处,然后取4个字符”


如果毫秒总是00000000,你可以用一个
替换(timeStr,.00000000','')
来整理它,而不是我想你想用时间戳-日期不能存储你的毫秒,所以它不理解FF

select  to_timestamp('29-MAY-19 09.01.16.00000000 PM','dd-mon-yy hh.mi.ss.FF8 AM') from dual
请注意,正如GMB所指出的,您无法让oracle解析
a.m
——您必须将其设置为
a.m.
am
。没有半途而废:)(希望这是一个复制错误)

如果您非常想使用to_DATE,请缩短毫秒数:

select 
  to_date(
    SUBSTR('29-MAY-19 09.01.16.00000000 PM', 1, 18) || SUBSTR('29-MAY-19 09.01.16.00000000 PM', -2, 2),
    'dd-mon-yy hh.mi.ssAM'
  ) 
from dual
如果您的时间序列是
a.m.
让第二个子序列使用
,-4,4)
-“从右开始,左4处,然后取4个字符”

如果毫秒始终为00000000,则可以使用
替换(timeStr,.00000000,'')
来整理此问题,而不使用数据类型DATE。因此,如果表的closed_on列的类型为Date,则它将不起作用。 Caius Jard建议了好的替代解决方案。

分数秒(FF)与数据类型日期无关。因此,如果表的closed_on列的类型为Date,则它将不起作用。
Caius Jard已经提出了很好的替代解决方案。

另一个选择是使用
#
跳过字符,如下所示:

SQL> SELECT
  2      TO_DATE('29-MAY-19 09.01.16.00000000 PM', 'DD-MON-YYYY HH.MI.SS.######## AM')
  3  FROM
  4      DUAL;

TO_DATE('29-MAY-1909.01
-----------------------
29-MAY-0019 09.01.16 PM

SQL>

#
的数量应该是要跳过的字符数

另一个选项是使用
#
跳过字符,如下所示:

SQL> SELECT
  2      TO_DATE('29-MAY-19 09.01.16.00000000 PM', 'DD-MON-YYYY HH.MI.SS.######## AM')
  3  FROM
  4      DUAL;

TO_DATE('29-MAY-1909.01
-----------------------
29-MAY-0019 09.01.16 PM

SQL>
#
的数量应该是要跳过的字符数