SQL
用于存储用户会话的表:
CREATE TABLE sessions (
user_id INT,
expires TIMESTAMP
);
若要创建一个会话:
INSERT INTO sessions (user_id, expires) VALUES (:user_id,
CURRENT_TIMESTAMP + INTERVAL '+15 minutes');
要检索会话:
SELECT * FROM sessions WHERE user_id = :user_id AND
CURRENT_TIMESTAMP < expires;
问题
CURRENT_TIMESTAMP
(包括时区信息)与TIMESTAMP
列(不包括时区信息)是否有问题?发布于 2011-02-15 21:29:19
在我的经验中,日期/时间值在SQL方言中是相当有问题的。
DATE
、TIMESTAMP
、TIMESTAMP WITH TIME ZONE
和TIMESTAMP WITH LOCAL TIME ZONE
。TIMESTAMP
数据类型,但它不是您所认为的那样。
如果我必须以绝对可移植的方式处理日期/时间值,我将以char/varchar的形式以ISO8601紧凑的形式存储该值。
YYYYMMDDTHHMMSS[±HH:MM]
其中时间分量为24小时/军事时间。如果您需要时区支持,请包括来自UTC的偏移量,或表示Zulu (UTC)时间的“Z”。严格地说,如果没有“Z”后缀,则ISO 8601日期/时间值应该被解释为本地时间。
根据您的需要,将日期和时间组件划分为单独的列可能是值得的。
ISO8601给你
发布于 2011-02-15 21:28:10
虽然是标准SQL,但有些DBMS (如Server)不支持标准。所以答案是“是”和“否”。
尽管我认为ANSI标准的编写间隔文字的方法是:INTERVAL '15' MINUTE
,而不是您编写它的方式
发布于 2011-02-15 21:15:42
Server不支持此功能。您必须使用dataadd函数。所以答案是否定的--这不是可移植的SQL。
https://stackoverflow.com/questions/5009246
复制相似问题