在 oracle table 中转换 date/time
Convert date/time in oracle table
我需要转换 table 中的以下 date/time 和 select 少于 30 天的任何内容。
我在 table 中有两列:名称、时间戳
时间戳格式如下:2022-02-08T22:19:12:200
这是我到目前为止尝试的查询,只是 select 并将日期转换为不同的格式,但得到 oral-01843: 不是有效的月份
select 名称,to_date(时间戳,'MM/DD/YYYY')
来自我的table;
假设您的 timestamp
列采用 TIMESTAMP
数据类型,那么您不需要将该列转换为不同的格式(首先,因为 TIMESTAMP
是二进制 data-type 由 7-13 个字节组成,代表世纪的 7 个字节,year-of-century、月、日、小时、分钟和秒,然后是小数秒的 6 个可选字节,不存储在任何 human-readable 格式;其次,因为没有必要进行转换)。
要查找刚好小于 30 天的行,您可以使用:
SELECT name, timestamp
FROM table_name
WHERE timestamp >= SYSTIMESTAMP - INTERVAL '30' DAY;
如果你想忽略时间部分,那么你可以使用:
SELECT name, timestamp
FROM table_name
WHERE timestamp >= TRUNC(SYSDATE) - INTERVAL '30' DAY;
如果你想显示格式的时间戳列(而不是比较两个dates/times)那么你可以使用TO_CHAR
:
SELECT name,
TO_CHAR(timestamp, 'MM/DD/YYYY') AS formatted_timestamp
FROM table_name
如果您的列是 VARCHAR2
数据类型并且您以 ISO8601 格式存储字符串,那么您可以使用:
SELECT name, timestamp
FROM table_name
WHERE timestamp >= TO_CHAR(SYSTIMESTAMP - INTERVAL '30' DAY, 'YYYY-MM-DD"T"HH24:MI:SS.FF');
或者,如果您想忽略时间部分,则只需从 TO_CHAR
中的格式模型中删除时间部分即可:
SELECT name, timestamp
FROM table_name
WHERE timestamp >= TO_CHAR(SYSTIMESTAMP - INTERVAL '30' DAY, 'YYYY-MM-DD');
如果您想要显示您的字符串以不同的格式然后将其转换为时间戳,然后再转换回字符串:
SELECT name,
TO_CHAR(
TO_TIMESTAMP(timestamp, 'YYYY-MM-DD"T"HH24:MI:SS.FF'),
'MM/DD/YYYY'
) AS formatted_date
FROM table_name
db<>fiddle here
我需要转换 table 中的以下 date/time 和 select 少于 30 天的任何内容。
我在 table 中有两列:名称、时间戳
时间戳格式如下:2022-02-08T22:19:12:200
这是我到目前为止尝试的查询,只是 select 并将日期转换为不同的格式,但得到 oral-01843: 不是有效的月份
select 名称,to_date(时间戳,'MM/DD/YYYY') 来自我的table;
假设您的 timestamp
列采用 TIMESTAMP
数据类型,那么您不需要将该列转换为不同的格式(首先,因为 TIMESTAMP
是二进制 data-type 由 7-13 个字节组成,代表世纪的 7 个字节,year-of-century、月、日、小时、分钟和秒,然后是小数秒的 6 个可选字节,不存储在任何 human-readable 格式;其次,因为没有必要进行转换)。
要查找刚好小于 30 天的行,您可以使用:
SELECT name, timestamp
FROM table_name
WHERE timestamp >= SYSTIMESTAMP - INTERVAL '30' DAY;
如果你想忽略时间部分,那么你可以使用:
SELECT name, timestamp
FROM table_name
WHERE timestamp >= TRUNC(SYSDATE) - INTERVAL '30' DAY;
如果你想显示格式的时间戳列(而不是比较两个dates/times)那么你可以使用TO_CHAR
:
SELECT name,
TO_CHAR(timestamp, 'MM/DD/YYYY') AS formatted_timestamp
FROM table_name
如果您的列是 VARCHAR2
数据类型并且您以 ISO8601 格式存储字符串,那么您可以使用:
SELECT name, timestamp
FROM table_name
WHERE timestamp >= TO_CHAR(SYSTIMESTAMP - INTERVAL '30' DAY, 'YYYY-MM-DD"T"HH24:MI:SS.FF');
或者,如果您想忽略时间部分,则只需从 TO_CHAR
中的格式模型中删除时间部分即可:
SELECT name, timestamp
FROM table_name
WHERE timestamp >= TO_CHAR(SYSTIMESTAMP - INTERVAL '30' DAY, 'YYYY-MM-DD');
如果您想要显示您的字符串以不同的格式然后将其转换为时间戳,然后再转换回字符串:
SELECT name,
TO_CHAR(
TO_TIMESTAMP(timestamp, 'YYYY-MM-DD"T"HH24:MI:SS.FF'),
'MM/DD/YYYY'
) AS formatted_date
FROM table_name
db<>fiddle here