PostgreSQL

PostgreSQL 知识量:10 - 51 - 182

3.4 日期类型和时间类型><

日期类型和时间类型分类- 3.4.1 -

在PostgreSQL中,日期和时间类型的分类如下:

1. 日期类型:

  • date: 表示日期,格式为YYYY-MM-DD。

  • timestamp without time zone: 表示日期和时间,格式为YYYY-MM-DD HH:MI:SS。与带有时区的timestamp不同,这种类型不包含时区信息。

  • timestamp with time zone: 表示日期和时间,格式为YYYY-MM-DD HH:MI:SS。与不带有时区的timestamp相比,这种类型包含了时区信息。

2. 时间间隔类型:

  • interval: 表示时间间隔,可以是年、月、日、小时、分钟和秒等。

3. 时间类型:

  • time without time zone: 表示时间,格式为HH:MI:SS。

  • time with time zone: 表示时间,格式为HH:MI:SS。与不带有时区的时间相比,这种类型包含了时区信息。

4. 其他相关类型:

  • timestamp without time zone: 这是一个旧的日期和时间类型,已被timestamp without time zone替代。

  • timestamp with time zone (deprecated): 这是一个旧的日期和时间类型,已被timestamp with time zone替代。

  • interval year to month: 表示年间隔。

  • interval day to second: 表示日间隔,包括天、小时、分钟和秒等。

日期类型和时间类型输入格式- 3.4.2 -

在PostgreSQL中,日期和时间类型的输入格式取决于使用的类型。以下是常见的日期和时间类型的输入格式:

1. date:

  • 输入格式:YYYY-MM-DD

  • 示例:2023-10-23

2. timestamp without time zone:

  • 输入格式:YYYY-MM-DD HH:MI:SS

  • 示例:2023-10-23 14:30:00

3. timestamp with time zone:

  • 输入格式:YYYY-MM-DD HH:MI:SS TZR

  • 示例:2023-10-23 14:30:00+08

4. time without time zone:

  • 输入格式:HH:MI:SS

  • 示例:14:30:00

5. time with time zone:

  • 输入格式:HH:MI:SS TZR

  • 示例:14:30:00+08

6. interval:

  • 输入格式:HH:MI:SS, HH:MI:SS + HH:MI:SS, ...

  • 示例:1 hour 30 minutes, 5 days 12 hours 30 minutes

7. 其他日期和时间类型的输入格式:
还有其他一些旧的日期和时间类型,如timestamp without time zone和timestamp with time zone (deprecated),它们的输入格式与上述timestamp without time zone和timestamp with time zone类似。

注意:输入格式中的时间间隔(interval)表示时间间隔,而不是日期和时间之间的差异。时间间隔可以表示为小时、分钟、秒等,具体取决于需求。

日期类型和时间类型输出格式- 3.4.3 -

在PostgreSQL中,日期和时间类型的输出格式可以通过使用to_char函数进行自定义。to_char函数用于将日期和时间值转换为指定的字符串格式。

以下是一些常用的日期和时间类型的输出格式示例:

  1. 日期类型 (date):to_char(date_column, 'YYYY-MM-DD')

  2. 时间类型 (time):to_char(time_column, 'HH24:MI:SS')

  3. 时间间隔类型 (interval):to_char(interval_column, 'HH24:MI:SS')

  4. 日期和时间类型 (timestamp without time zone):to_char(timestamp_column, 'YYYY-MM-DD HH24:MI:SS')

  5. 日期和时间类型 (timestamp with time zone):to_char(timestamp_column, 'YYYY-MM-DD HH24:MI:SS TZR')

  6. 其他格式选项:PostgreSQL还提供了许多其他格式选项,可以用于指定日期和时间的输出格式。例如,使用'YYYY'表示四位数的年份,'MM'表示两位数的月份,'DD'表示两位数的日期,等等。完整的格式选项列表可以在PostgreSQL的官方文档中找到。

注意:输出格式中的时区表示法(TZR)用于表示时区。例如,'+08'表示东八区。如果不需要时区信息,可以省略TZR部分。

通过使用to_char函数和适当的格式字符串,可以控制日期和时间类型在查询结果中的显示方式。这使得可以根据需求自定义输出格式,以适应不同的应用程序和报告需求。

时区- 3.4.4 -

PostgreSQL支持对时区的设置,并且可以通过查看和设置时区参数来管理时区。

在PostgreSQL中,默认时区是由timezone参数控制的。要查看当前的默认时区设置,可以使用以下命令:SHOWtimezone。如果还没有设置默认时区,默认时区通常是UTC(协调世界时)。

要更改默认时区,可以使用SET命令。例如,要将默认时区设置为上海时区(东八区),可以使用以下命令:SETtimezone='Asia/Shanghai'。此外,也可以使用ALTER DATABASE命令来更改特定数据库的默认时区。

设置数据库的默认时区也会影响到该数据库中的所有表和数据。如果只想更改特定表的时区设置,可以使用ALTER TABLE命令。例如,要将名为mytable的表的时区设置为上海时区,可以使用以下命令:ALTERTABLEmytableSETtimezone='Asia/Shanghai'。

此外,PostgreSQL中的时间戳数据类型有两种:时间戳(也称为不带时区的时间戳)和带时区的时间戳(或简称timestamptz)。带时区的时间戳存储为自2000-01-01 UTC 午夜以来的秒数,不存储时区信息。

日期类型和时间类型运算符- 3.4.5 -

在PostgreSQL中,日期和时间类型支持多种运算符,用于执行各种日期和时间相关的操作。以下是一些常用的日期和时间类型运算符:

1. 比较运算符:

  • =:等于

  • <> 或 !=:不等于

  • >:大于

  • <:小于

  • >=:大于或等于

  • <=:小于或等于这些比较运算符可用于比较日期、时间和时间间隔。

2. 算术运算符:

  • +:加法(用于时间间隔)

  • -:减法(用于时间间隔)

  • *:乘法(用于时间间隔)

  • /:除法(用于时间间隔)这些算术运算符可用于对日期、时间和时间间隔进行算术运算。

3. 组合运算符:

  • ||:连接两个日期或时间值(通常用于日期和时间的组合)

4. 其他运算符:

  • interval:用于表示时间间隔,可以与算术运算符一起使用。例如,interval '1 day'表示一天的时间间隔。

以下是一些示例,展示了如何在PostgreSQL中使用日期和时间类型的运算符:

计算两个日期之间的天数差异:

SELECT '2023-01-01'::date - '2022-01-01'::date AS days_difference;

计算两个时间之间的分钟差异:

SELECT '14:30:00'::time - '13:30:00'::time AS minutes_difference;

计算两个时间间隔之间的总秒数:

SELECT (interval '2 hours' + interval '30 minutes') * 60 AS total_seconds;