如何在SQL中为日期/时间值增加30分钟并实现Timepair表时间字段的正确偏移?
SQL时间偏移问题解决方案
1. 如何在SQL中为日期值增加30分钟?
不同SQL数据库的时间处理函数略有差异,我会列出几种主流数据库的实现方式,你可以根据自己使用的数据库选择:
- MySQL/MariaDB:两种写法都能实现,选你习惯的就行
-- 方式1:用DATE_ADD函数 SELECT DATE_ADD(your_date_column, INTERVAL 30 MINUTE) AS new_date; -- 方式2:直接与INTERVAL相加 SELECT your_date_column + INTERVAL 30 MINUTE AS new_date; - PostgreSQL:直接通过INTERVAL关键字做加法运算
SELECT your_date_column + INTERVAL '30 minutes' AS new_date; - SQL Server:使用DATEADD函数,参数顺序是「时间单位、增量、目标日期」
SELECT DATEADD(MINUTE, 30, your_date_column) AS new_date; - Oracle:两种方式都支持,按需选择
-- 方式1:直接加INTERVAL SELECT your_date_column + INTERVAL '30' MINUTE AS new_date; -- 方式2:用NUMTODSINTERVAL函数 SELECT your_date_column + NUMTODSINTERVAL(30, 'MINUTE') AS new_date;
2. 更新timepair表的时间字段偏移30分钟
先说说你之前尝试的语句update set start_pair = date(start_pair) + minute(30)的问题:
- 漏掉了要更新的表名(必须写成
UPDATE timepair SET ...) - 你的
start_pair是纯时间类型(比如TIME),用date()函数会返回无效的日期值(比如MySQL中会得到0000-00-00),完全没必要加这个函数 minute(30)不是合法的SQL函数,不能这样生成时间增量
下面是针对不同数据库的正确更新语句:
MySQL/MariaDB
UPDATE timepair SET start_pair = start_pair + INTERVAL 30 MINUTE, end_pair = end_pair + INTERVAL 30 MINUTE;
PostgreSQL
UPDATE timepair SET start_pair = start_pair + INTERVAL '30 minutes', end_pair = end_pair + INTERVAL '30 minutes';
SQL Server
UPDATE timepair SET start_pair = DATEADD(MINUTE, 30, start_pair), end_pair = DATEADD(MINUTE, 30, end_pair);
Oracle
UPDATE timepair SET start_pair = start_pair + INTERVAL '30' MINUTE, end_pair = end_pair + INTERVAL '30' MINUTE;
补充:如果你的
start_pair和end_pair是DATETIME类型(日期+时间),上面的语句同样适用,函数会自动处理完整的日期时间值。
内容的提问来源于stack exchange,提问作者ERJAN
相关产品推荐
相关产品推荐

