暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

AntDB 使用教程 / SQL语言 / 数据类型12

tocata 2024-08-16
79

间隔输入

interval 值可以使用下列语法书写:

[@] quantity unit [quantity unit...] [direction]

其中 quantity 是一个数字(很可能是有符号的); unit 是毫秒、 millisecondsecond、 minutehourday、 weekmonthyear、 decadecenturymillennium 或者缩写或者这些单位的复数; direction 可以是 ago 或者为空。At 符号(@)是一个可选的噪声。不同单位的数量通过合适的符号计数被隐式地添加。ago 对所有域求反。如果 IntervalStyle 被设置为 postgres_verbose,该语法也被用于间隔输出。

日、小时、分钟和秒的数量可以不适用显式的单位标记指定。例如,'1 12:59:10' 被读作 '1 day 12 hours 59 min 10 sec'。同样,一个年和月的组合可以使用一个横线指定,例如 '200-10' 被读作 '200 年 10 个月'(这些较短的形式事实上是 SQL 标准唯一许可的形式,并且在 IntervalStyle 被设置为 sql_standard 时用于输出)。

间隔值也可以被写成 ISO 8601 时间间隔。带标志符的格式看起来像这样:

P quantity unit [ quantity unit ...] [ T [ quantity unit ...]]

该串必须以一个 P 开始,并且可以包括一个引入当日时间单位的 T。单位可以被忽略,并且可以以任何顺序指定,但是小于一天的单位必须出现在 T 之后。特别地,M 的含义取决于它出现在 T 之前还是之后。

ISO 8601 间隔单位缩写

缩写含义
Y
M月(在日期部分中)
W
D
H小时
M分钟(在时间部分中)
S

如果使用替代格式:

P [ years-months-days ] [ T hours:minutes:seconds ]

串必须以 P 开始,并且一个 T 分隔间隔的日期和时间部分。其值按照类似于 ISO 8601日期的数字给出。

在用一个*声明书写一个间隔常量时,或者为一个用声明定义的间隔列赋予一个串时,对于为标记的量的解释依赖于。例如 INTERVAL '1' YEAR 被解读成 1 年,而INTERVAL '1'表示 1 秒。同样,*声明允许的最后一个有效域“右边”的域值会被无声地丢弃掉。例如书写 INTERVAL '1 day 2:03:04' HOUR TO MINUTE 将会导致丢弃秒域,而不是日域。

根据 SQL 标准,一个间隔值的所有域都必须由相同的符号,这样一个领头的负号将会应用到所有域;例如在间隔文字 '-1 2:03:04' 中的负号会被应用于日、小时、分钟和秒部分。AntDB 允许域具有不同的符号,并且在习惯上认为以文本表示的每个域具有独立的符号,因此在这个例子中小时、分钟和秒部分被认为是正值。如果 IntervalStyle 被设置为 sql_standard,则一个领头的符号将被认为是应用于所有域(但是仅当没有额外符号出现)。否则将使用传统的 AntDB 解释。为了避免混淆,推荐在任何域为负值时为每一个域都附加一个显式的符号。

在冗长的输入格式中,以及在更紧凑输入格式的某些域中,域值可以有分数部分;例如 '1.5 week' 或 '01:02:03.45'。这样的输入被转换为合适的月数、日数和秒数用于存储。当这样会导致月和日中的分数时,分数被加到低序域中,使用的转换因子是 1 月=30 日和 1 日=24 小时。例如,'1.5 month' 会变成 1 月和 15 日。只有秒总是在输出时被显示为分数。

下表展示了一些有效 interval 输入的例子。

最后修改时间:2024-08-16 15:54:49
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论