gpt4 book ai didi

oracle - 获取特定格式的当前时间戳,秒到小数点后一位

转载 作者:行者123 更新时间:2023-12-04 02:11:20 24 4
gpt4 key购买 nike

我正在尝试在 Oracle 数据库中设置一个类似于以下内容的值:

2016-06-21 03:07:25.0

它是当前日期的 varchar,小数点后一位表示秒。我尝试了多种方法来实现这一目标,但无济于事:

SQL> select sysdate from dual;

SYSDATE
--------
21-06-16

从这里我尝试了:

SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS.F';
ERROR:
ORA-01821: date format not recognized

SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS.s';
ERROR:
ORA-01821: date format not recognized

然后我尝试了:

SQL> SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM dual;

TO_CHAR(SYSDATE,'YY
-------------------
2016-06-21 12:58:55

由于计算到秒,我尝试了小数部分:

SQL> SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS.SSSS') from dual;

TO_CHAR(SYSDATE,'YYYY-MM
------------------------
2016-06-21 13:23:47.4747

所以我可以获得 4 个重要位置。现在我只尝试 1:

SQL> SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS.S') from dual;
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS.S') from dual
*
ERROR at line 1:
ORA-01821: date format not recognized

那么如何获取上述格式的当前时间戳并将秒设置为小数点后一位呢?

最佳答案

SSSS 不是小数秒。它只是重复 SS 值两次;在您的示例中,您得到 13:23:47.4747 - 4747 仅显示两次 47。也许您正在考虑 SSSSS,但这是自午夜以来的秒数(即 0-86399),因此在这里也没有用。单个 S 不是 valid format model element .

日期没有小数秒精度。单个 F 也不是有效的格式模型元素,但即使是 FF 也对日期无效。

您需要使用 systimestamp以秒为单位获取服务器时间,而不是 sysdate :

select to_char(systimestamp, 'YYYY-MM-DD HH24:MI:SS.FF1') from dual;

TO_CHAR(SYSTIMESTAMP,'YYYY-MM
-----------------------------
2016-06-21 14:42:22.7

将日期/时间存储为字符串通常不是一个好主意。我建议您创建 timestamp(1) 列,当您从 systimestamp 设置它时,它将保持一位小数的精度。您可以看到使用 cast 会得到什么:

select to_char(cast(systimestamp as timestamp(1)), 'YYYY-MM-DD HH24:MI:SS.FF9') from dual;

TO_CHAR(CAST(SYSTIMESTAMPASTI
-----------------------------
2016-06-21 14:49:09.900000000

将日期/时间转换为字符串实际上应该只是为了显示,而不是为了存储。

关于oracle - 获取特定格式的当前时间戳,秒到小数点后一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37945817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com