sql - 如何在 Oracle 的 SQL 中将数字 (YYMMDDhhmmss) 转换为时间戳?
问题描述
我正在尝试计算systimestamp
Oracle 的 SQL 中的一个数字之间的差异。
数字格式为YYMMDDhhmmss
(例如190903210000
)。此数字保存在表格中,并且基于 24 小时时区。
我正在尝试以秒为单位计算该数字和系统时间戳的差异。
我必须使用如下选择语句:
SELECT X FROM table
然后我需要计算一个差异(SYSTEMTIMESTAMP - X)
我的系统时间戳格式如下03-SEP-19 06.21.49.817757 PM +00:00
你能告诉我正确的方法吗?
解决方案
要将 a 转换NUMBER
为 a,TIMESTAMP
您可以使用类似 的表达式TO_TIMESTAMP(TO_CHAR(...))
。要计算两个时间戳之间的秒数,一种解决方案是将两者都转换为日期,然后减去它们:您将以天为单位获得(十进制)结果,然后可以将其转换为秒。
考虑:
(
CAST(systimestamp AS DATE)
- CAST(TO_TIMESTAMP(TO_CHAR(190903210000), 'YYMMDDhh24miss') AS DATE)
) * 60 * 60 * 24
但是,由于时间戳的数字表示不包含小数秒(也不包含时区),因此直接转换为 a 可能会更简单DATE
,这将消除CAST
之后对它的需要,因此:
(
CAST(systimestamp AS DATE)
- TO_DATE(TO_CHAR(190903210000), 'YYMMDDhh24miss')
) * 60 * 60 * 24
SELECT
systimestamp,
190903210000 num,
TO_TIMESTAMP(TO_CHAR(190903210000), 'YYMMDDhh24miss') num_as_timestamp,
(
CAST(systimestamp AS DATE) -
CAST(TO_TIMESTAMP(TO_CHAR(190903210000), 'YYMMDDhh24miss') AS DATE)
) * 60 * 60 * 24 diff
FROM DUAL;
系统时间戳 | 数字 | NUM_AS_TIMESTAMP | 差异 :------------------------------------------------ | ------------: | :-------------------------------- | ---: 03-SEP-19 09.13.39.989343 下午 +01:00 | 190903210000 | 03-SEP-19 09.00.00.000000000 下午 | 819
SELECT
systimestamp,
190903210000 num,
TO_DATE(TO_CHAR(190903210000), 'YYMMDDhh24miss') num_as_date,
(
CAST(systimestamp AS DATE)
- TO_DATE(TO_CHAR(190903210000), 'YYMMDDhh24miss')
) * 60 * 60 * 24 diff
FROM DUAL;
系统时间戳 | 数字 | NUM_AS_DATE | 差异 :------------------------------------------------ | ------------: | :----------------- | ----------------------------------------------------: 03-SEP-19 09.20.44.524445 下午 +01:00 | 190903210000 | 03-SEP-19 21:00:00 | 1243.999999999999999999999999999999999996
推荐阅读
- python - 熊猫如何将两列转换为没有重复的组列表
- mysql - 如何查找具有相同 ID 和某些部件号的条目列表?
- c++-cli - C++/CLI 中的“for each”:一个还是两个?
- google-sheets-api - 有没有办法只获取使用 google sheet API 修改的行?
- linux - awk 命令查找和替换值
- hive - impala CREATE EXTERNAL TABLE 并删除双引号
- javascript - 将 JSON 项添加到 localStorage
- python - 端口转发 Webserver Python
- php - Google 饼图未在 IE <= 8 中显示
- android - 有没有办法获取当前播放歌曲的信息?