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

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

tocata 2024-08-16
21

间隔输入

例子描述
1-2SQL 标准格式:1 年2 个月
3 4:05:06SQL 标准格式:3 日 4 小时 5 分钟 6 秒
1 year 2 months 3 days 4 hours 5 minutes 6 seconds传统 antdb 格式:1 年 2 个月 3 日 4 小时 5 分钟 6 秒钟
P1Y2M3DT4H5M6S“带标志符的”ISO 8601 格式:含义同上
P0001-02-03T04:05:06ISO 8601 的“替代格式”:含义同上

在内部,interval 值被存储为months、days 以及 seconds。之所以这样做是因为一个月中的天数是变化的,并且在涉及到夏令时调整时一天可以有 23 或者 25 个小时。months 以及 days 域是整数,而 seconds 域可以存储分数。因为区间通常是从常量字符串或者 timestamp 减法创建而来,这种存储方法在大部分情况下都很好,但是也可能导致预料之外的结果:

SELECT EXTRACT(hours from '80 minutes'::interval);
 date_part
-----------
         1

SELECT EXTRACT(days from '80 hours'::interval);
 date_part
-----------
         0
复制

函数 justify_days 和 justify_hours 可以用来调整溢出其正常范围之外的 days 和 hours。

间隔输出

间隔类型的输出格式可以被设置为四种风格之一:sql_standardantdbpostgres_verbose 或 iso_8601,设置方法使用 SET intervalstyle 命令。默认值为 antdb 格式。表 5.18 展示了每种输出风格的例子。

如果间隔值符合 SQL 标准的限制(仅年-月或仅日-时间,没有正负值部分的混合),sql_standard 风格为间隔文字串产生符合 SQL 标准规范的输出。否则输出将看起来像一个标准的年-月文字串跟着一个日-时间文字串,并且带有显式添加的符号以区分混合符号的间隔。

当 DateStyle 参数被设置为非 ISO 输出时,postgres_verbose 风格的输出匹配 AntDB 8.4 版本以前的输出。

间隔输出风格例子

风格声明年-月间隔日-时间间隔混合间隔
sql_standard1-23 4:05:06-1-2 +3 -4:05:06
postgres1 year 2 mons3 days 04:05:06-1 year -2 mons +3 days -04:05:06
postgres_verbose@ 1 year 2 mons@ 3 days 4 hours 5 mins 6 secs@ 1 year 2 mons -3 days 4 hours 5 mins 6 secs ago
iso_8601P1Y2MP3DT4H5M6SP-1Y-2M3DT-4H-5M-6S
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论