在 DBeaver (SQL) 的时间戳列中加减 1 小时
Add and subtract 1 hour from Timestamp column in DBeaver (SQL)
我有一个 table 列 'Timestamp'。我想创建 2 个包含该时间戳的 -1 小时和 +1 小时的列。
这是时间戳的格式:2020-08-31 11:05:55
我想再获得 2 列显示 -1 小时和 +1 小时:2020-08-31 10:05:55 和 2020-08-31 12:05:55
谢谢!
如果您的 DBMS 是 Microsoft SQL 服务器,DATEADD()]1 可能是您的最佳选择。如果您使用的是 Oracle 之类的软件,a_horse_with_no_name 的 ANSI 区间解决方案是一个很好的、易于阅读的选项。
例如下面的代码产生,
SELECT '2020-08-31 11:05:55' AS time_stamp,
DATEADD(hour, 1, '2020-08-31 11:05:55') plus_one_hour,
DATEADD(hour, -1, '2020-08-31 11:05:55') minus_one_hour;
--输出
plus_one_hour time_stamp minus_one_hour
'2020-08-31 12:05:55.000' '2020-08-31 11:05:55.000' '2020-08-31 10:05:55.000'
在标准 ANSI SQL 中,您可以简单地减去一个区间:
select the_column - interval '1' hour as one_hour_before,
the_column,
the_column + interval '1' hour as one_hour_after
from the_table
where ....
a_horse_with_no_name 是对的。标准方法是 add/subtract INTERVALs.
但是 Vertica 日期算法提供了一些非常简单的快捷方式...
当您 add/subtract 一个整数值时,它被解释为 天 的天数:
SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP+1, CURRENT_TIMESTAMP-1;
?column? | ?column? | ?column?
-------------------------------+-------------------------------+-------------------------------
2020-09-03 00:38:54.781675-04 | 2020-09-04 00:38:54.781675-04 | 2020-09-02 00:38:54.781675-04
如果你想add/subtract:
- 小时你必须使用1/24,
- 分钟你必须使用1/1440
- 秒你必须使用1/86400.
例如:
SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP+1/24, CURRENT_TIMESTAMP-1/24;
?column? | ?column? | ?column?
-------------------------------+-------------------------------+-------------------------------
2020-09-03 00:38:54.781675-04 | 2020-09-03 01:38:54.781675-04 | 2020-09-02 23:38:54.781675-04
SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP+1/1440, CURRENT_TIMESTAMP-1/1440;
?column? | ?column? | ?column?
-------------------------------+-------------------------------+-------------------------------
2020-09-03 00:38:54.781675-04 | 2020-09-03 00:39:54.781675-04 | 2020-09-03 00:37:54.781675-04
我有一个 table 列 'Timestamp'。我想创建 2 个包含该时间戳的 -1 小时和 +1 小时的列。
这是时间戳的格式:2020-08-31 11:05:55 我想再获得 2 列显示 -1 小时和 +1 小时:2020-08-31 10:05:55 和 2020-08-31 12:05:55
谢谢!
DATEADD()]1 可能是您的最佳选择。如果您使用的是 Oracle 之类的软件,a_horse_with_no_name 的 ANSI 区间解决方案是一个很好的、易于阅读的选项。
例如下面的代码产生,
SELECT '2020-08-31 11:05:55' AS time_stamp,
DATEADD(hour, 1, '2020-08-31 11:05:55') plus_one_hour,
DATEADD(hour, -1, '2020-08-31 11:05:55') minus_one_hour;
--输出
plus_one_hour time_stamp minus_one_hour
'2020-08-31 12:05:55.000' '2020-08-31 11:05:55.000' '2020-08-31 10:05:55.000'
在标准 ANSI SQL 中,您可以简单地减去一个区间:
select the_column - interval '1' hour as one_hour_before,
the_column,
the_column + interval '1' hour as one_hour_after
from the_table
where ....
a_horse_with_no_name 是对的。标准方法是 add/subtract INTERVALs.
但是 Vertica 日期算法提供了一些非常简单的快捷方式...
当您 add/subtract 一个整数值时,它被解释为 天 的天数:
SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP+1, CURRENT_TIMESTAMP-1;
?column? | ?column? | ?column?
-------------------------------+-------------------------------+-------------------------------
2020-09-03 00:38:54.781675-04 | 2020-09-04 00:38:54.781675-04 | 2020-09-02 00:38:54.781675-04
如果你想add/subtract:
- 小时你必须使用1/24,
- 分钟你必须使用1/1440
- 秒你必须使用1/86400.
例如:
SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP+1/24, CURRENT_TIMESTAMP-1/24;
?column? | ?column? | ?column?
-------------------------------+-------------------------------+-------------------------------
2020-09-03 00:38:54.781675-04 | 2020-09-03 01:38:54.781675-04 | 2020-09-02 23:38:54.781675-04
SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP+1/1440, CURRENT_TIMESTAMP-1/1440;
?column? | ?column? | ?column?
-------------------------------+-------------------------------+-------------------------------
2020-09-03 00:38:54.781675-04 | 2020-09-03 00:39:54.781675-04 | 2020-09-03 00:37:54.781675-04