Sql 在oracle中将时间戳格式转换为整数

Sql 在oracle中将时间戳格式转换为整数,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有格式为“01-JAN-00 10.05.54.170489000 AM”的时间戳值。当我尝试使用格式“yyyymmddhhmm24missf”转换为整数时: 我得到的值为200001100554170489。缺少最后3位数字。我需要的确切值为200001100554170489000 我怎样才能将最后三位数字保留在我的号码中?当我使用通过CTE提供的普通时间戳运行查询时,您的查询(稍加更正)会得到您想要的结果: set numwidth 23 alter session set nls_ti

我有格式为“01-JAN-00 10.05.54.170489000 AM”的时间戳值。当我尝试使用格式“yyyymmddhhmm24missf”转换为整数时:

我得到的值为200001100554170489。缺少最后3位数字。我需要的确切值为200001100554170489000

我怎样才能将最后三位数字保留在我的号码中?

当我使用通过CTE提供的普通时间戳运行查询时,您的查询(稍加更正)会得到您想要的结果:

set numwidth 23
alter session set nls_timestamp_format = 'DD-MON-RR HH:MI:SS.FF AM';

with table_name (date_column) as (
  select to_timestamp('01-JAN-00 10.05.54.170489000 AM', 'DD-MON-RR HH:MI:SS.FF AM')
  from dual
)
select date_column, to_number(to_char(date_column,'yyyymmddhh24missff')) as result
from table_name;

DATE_COLUMN                                      RESULT
------------------------------- -----------------------
01-JAN-00 10:05:54.170489000 AM 20000101100554170489000
我能看到的得到实际结果的唯一方法是,如果时间戳列实际上被限制在该精度;i、 e.
日期\u列时间戳(6)

想要显示比实际允许的值更高的精度似乎有些奇怪,但如果确实希望始终包含最后三个零,则可以使用
ff9
覆盖列精度:

with table_name (date_column) as (
  select cast(to_timestamp('01-JAN-00 10.05.54.170489000 AM', 'DD-MON-RR HH:MI:SS.FF AM')
    as timestamp(6))
  from dual
)
select date_column, to_number(to_char(date_column,'yyyymmddhh24missff9')) as result
from table_name;

DATE_COLUMN                                      RESULT
------------------------------- -----------------------
01-JAN-00 10:05:54.170489000 AM 20000101100554170489000


时间戳(或日期)没有内在的格式,您只是看到它被您的客户机转换为字符串,可能是基于您的会话NLS设置。我运行了一个
alter会话
,以匹配您似乎正在使用的内容。请注意,即使我将数据类型限制为
timestamp(6)
,客户机使用
ff
的默认格式仍显示九位精度。查询表时看到所有九位并不意味着值实际上可以有那么高的精度,在这种情况下,显示的最后三位数字将始终为零。

是否需要用Java编写此代码?您的查询缺少右括号,并且有一个额外的
mm
使其无效。但经过修正后,似乎得出了正确的结果。您使用的是哪个版本的Oracle,在哪个平台上?
with table_name (date_column) as (
  select cast(to_timestamp('01-JAN-00 10.05.54.170489000 AM', 'DD-MON-RR HH:MI:SS.FF AM')
    as timestamp(6))
  from dual
)
select date_column, to_number(to_char(date_column,'yyyymmddhh24missff')) as result
from table_name;

DATE_COLUMN                                      RESULT
------------------------------- -----------------------
01-JAN-00 10:05:54.170489000 AM    20000101100554170489
with table_name (date_column) as (
  select cast(to_timestamp('01-JAN-00 10.05.54.170489000 AM', 'DD-MON-RR HH:MI:SS.FF AM')
    as timestamp(6))
  from dual
)
select date_column, to_number(to_char(date_column,'yyyymmddhh24missff9')) as result
from table_name;

DATE_COLUMN                                      RESULT
------------------------------- -----------------------
01-JAN-00 10:05:54.170489000 AM 20000101100554170489000