gpt4 book ai didi

php - 用于日期算术和比较的可移植 SQL

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:53 26 4
gpt4 key购买 nike

SQL

用于存储用户 session 的表:

CREATE TABLE sessions (
user_id INT,
expires TIMESTAMP
);

创建 session :

INSERT INTO sessions (user_id, expires) VALUES (:user_id,
CURRENT_TIMESTAMP + INTERVAL '+15 minutes');

检索 session :

SELECT * FROM sessions WHERE user_id = :user_id AND
CURRENT_TIMESTAMP < expires;

问题

  • 这是可移植的SQL吗?
    这是否适用于通过 PHP 可用的任何数据库 PDO extension (不包括 SQLite)?

  • 这在不同时区是否正确?跨越夏令时调整?
    CURRENT_TIMESTAMP(包含时区信息)与 TIMESTAMP 列(不包含时区信息)混合使用有任何问题吗?

最佳答案

根据我的经验,日期/时间值在 SQL 方言中是相当有问题的。

  • Oracle 支持DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE
    • DB2 支持 DATE、TIME 和 TIMESTAMP。
    • SQL Server 支持 DATETIME 和(最近)DATE。 SQL Server 有一个 TIMESTAMP 数据类型,但它不是您想象的那样。
    • MySQL 支持 DATE、DATETIME、TIMESTAMP、TIME 和 YEAR
    • PostgresSQL 支持 TIMESTAMP 和 TIME,带和不带时区,以及 DATE

如果我必须以绝对可移植的方式处理日期/时间值,我会将该值存储为 ISO8601 紧凑形式的 char/varchar

YYYYMMDDTHHMMSS[±HH:MM]

其中时间部分是 24 小时/军用时间。如果您需要时区支持,请包括与 UTC 的偏移量,或“Z”以指示祖鲁 (UTC) 时间。严格来说,如果没有“Z”后缀,ISO 8601 日期/时间值应该被解释为本地时间。

根据您的需要,将日期和时间组件分成单独的列可能是值得的。

ISO8601给你

  • 便携性
  • 正确的整理/比较
  • 易于解析

关于php - 用于日期算术和比较的可移植 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5009246/

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