Sql 如何在oracle中从时间戳列中删除最后几个额外的零?

Sql 如何在oracle中从时间戳列中删除最后几个额外的零?,sql,oracle,Sql,Oracle,我需要从timestamp列中删除几个额外的零 例如:2017年11月4日09.22.47.000000000下午 我想要这样的:2017年11月4日09.22.47.000 从毫秒开始只有前三个零 我尝试将此“转换为字符(列名称,'YYYY-MON-DD HH24:MI:SS.FF3')”但它将其转换为字符串,但我只需要时间戳格式。来自@jarlh的解决方案是正确的 例如CAST(时间戳'2018-06-19 08:54:41.928513'作为时间戳(3))返回2018-06-19 08:5

我需要从timestamp列中删除几个额外的零

例如:
2017年11月4日09.22.47.000000000下午

我想要这样的:
2017年11月4日09.22.47.000

从毫秒开始只有前三个零


我尝试将此
“转换为字符(列名称,'YYYY-MON-DD HH24:MI:SS.FF3')”
但它将其转换为字符串,但我只需要时间戳格式。

来自@jarlh的解决方案是正确的

例如
CAST(时间戳'2018-06-19 08:54:41.928513'作为时间戳(3))
返回
2018-06-19 08:54:41.929

但是,时间戳的默认输出格式似乎是
DD-MON-YY HH.MI.SS.FF9 PM
,因此在输出时总是用零填充

试一试

然后,您应该只获得
FF
的相关数字,在您的案例中为三位

从文件

FF[1..9]

分数秒;不打印基数字符。使用X格式 元素添加基数字符。使用FF后面的数字1到9来 指定数字的小数部分的位数 返回的日期时间值如果未指定数字,则Oracle 数据库使用为日期时间数据类型指定的精度,或 数据类型的默认精度。在时间戳和间隔中有效 格式,但不是日期格式


cast(列为时间戳(3))
?它不起作用,额外的零仍然存在“我只需要时间戳格式”-时间戳是一种数据类型,具有内部重新表示。您看到的是时间戳的字符串表示,无论您是否显式使用
to_char
,如果不使用,您的客户机只需为您格式化字符串。数据类型上的约束(如
时间戳(3)
)会影响存储精度,在此范围内,尾随的零始终有效(隐式)存在,就像分数一样。如果您的客户端/应用程序需要一个时间戳,那么就由它来适当地处理或显示该值。因此,如果sql中有任何查询或函数,我可以直接转换我指定的时间戳列。是的,
CAST(…as timestamp(3))
应该这样做,我不理解您的担心。我在oracle 04-NOV-17 09.22.47.000000000中有这个时间戳格式,我想删除最后6个零,我试过那个演员功能,但对我不起作用。你说的“对我不起作用”是什么意思?请向我们展示您的代码和结果以及所需的结果。
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'DD-MON-YY HH.MI.SS.FF PM';