PostgreSQL - DATE/TIME 函数和操作符
-
简述
我们在数据类型一章中讨论了date/time数据类型。现在,让我们看看date/time运算符和函数。下表列出了基本算术运算符的行为 -操作符 例子 结果 + date '2001-09-28' + integer '7' date'2001-10-05' + date“2001-09-28”+ interval “1 hour” 时间戳'2001-09-28 01:00:00' + date“2001-09-28”+time“03:00” 时间戳'2001-09-28 03:00:00' + interval “1day”+interval “1hour” interval '1 day 01:00:00' + 时间戳 '2001-09-28 01:00' + interval '23 hour' 时间戳'2001-09-29 00:00:00' + time“01:00”+interval “3hour” time'04:00:00' - - interval “23 hour” interval '-23:00:00' - date“2001-10-01”-date“2001-09-28” integer “3”(day) - date '2001-10-01' - integer '7' date'2001-09-24' - date '2001-09-28' - interval '1 hour' 时间戳'2001-09-27 23:00:00' - time'05:00' - time'03:00' interval '02:00:00' - time“05:00” - interval “2 hour” time'03:00:00' - 时间戳 '2001-09-28 23:00' - interval '23 hour' 时间戳'2001-09-28 00:00:00' - interval '1 day' - interval '1 hour' interval '1day-01:00:00' - 时间戳'2001-09-29 03:00' - 时间戳'2001-09-27 12:00' interval '1 day 15:00:00' * 900 * interval '1 second' interval “00:15:00” * 21 * interval '1 day' interval '21day' * double precision '3.5' * interval '1 hour' interval '03:30:00' / interval “1hour”/double precision“1.5” interval '00:40:00' 以下是可用的所有重要date和time相关函数的列表。序号 函数说明 1 AGE() 减去参数2 CURRENT DATE/TIME() 当前date和time3 DATE_PART() 获取子字段(相当于提取)4 EXTRACT() 获取子字段5 ISFINITE() 测试有限的date、time和interval (不是 +/-infinity)6 JUSTIFY 调整interval -
AGE(时间戳,时间戳),AGE(时间戳)
序号 函数说明 1 AGE(timestamp, timestamp)当使用第二个参数的 TIMESTAMP 形式调用时,AGE() 减去参数,产生使用年份和月份且类型为 INTERVAL 的“符号”结果。2 AGE(timestamp)当仅使用 TIMESTAMP 作为参数调用时,AGE() 从 current_date 中减去(在午夜)。函数 AGE(timestamp, timestamp) 的示例是 -上面给出的 PostgreSQL 语句将产生以下结果 -函数 AGE(timestamp) 的示例是 -上面给出的 PostgreSQL 语句将产生以下结果 - -
当前date/time()
PostgreSQL 提供了许多返回与当前date和time相关的值的函数。以下是一些函数 -序号 函数说明 1 CURRENT_DATE提供当前date。2 CURRENT_TIME提供带时区的值。3 CURRENT_TIMESTAMP提供带时区的值。4 CURRENT_TIME(precision)可选地采用精度参数,这会导致结果被四舍五入到second字段中的小数位数。5 CURRENT_TIMESTAMP(precision)可选地采用精度参数,这会导致结果被四舍五入到second字段中的小数位数。6 LOCALTIME提供没有时区的值。7 LOCALTIMESTAMP提供没有时区的值。8 LOCALTIME(precision)可选地采用精度参数,这会导致结果被四舍五入到second字段中的小数位数。9 LOCALTIMESTAMP(precision)可选地采用精度参数,这会导致结果被四舍五入到second字段中的小数位数。使用上表中的函数的示例 -PostgreSQL 还提供了返回当前语句开始time的函数,以及调用函数时的实际当前time。这些函数是 -序号 函数说明 1 transaction_timestamp()它等价于 CURRENT_TIMESTAMP,但被命名为清楚地反映它返回的内容。2 statement_timestamp()它返回当前语句的开始time。3 clock_timestamp()它返回实际的当前time,因此即使在单个 SQL 命令中,它的值也会发生变化。4 timeofday()它返回实际的当前time,但作为格式化的文本字符串而不是带有时区值的时间戳。5 now()它是一个传统的 PostgreSQL 等价于 transaction_timestamp()。 -
DATE_PART(文本,时间戳),DATE_PART(文本,interval ),DATE_TRUNC(文本,时间戳)
序号 函数说明 1 DATE_PART('field', source)这些函数获取子字段。字段参数需要是字符串值,而不是名称。有效的字段名称是:世纪、日、十年、道、多伊、纪元、hour、等道、等年、微second、千年、毫second、分钟、月、季度、second、时区、时区hour、时区分钟、周、年。2 DATE_TRUNC('field', source)此函数在概念上类似于数字的trunc函数。source是时间戳或interval 类型的值表达式。字段选择截断输入值的精度。返回值的类型为timestamp或interval。字段的有效值为:微second、毫second、second、分钟、hour、日、周、月、季度、年、十年、世纪、千年以下是 DATE_PART( 'field' , source) 函数的示例 -以下是 DATE_TRUNC( 'field' , source) 函数的示例 - -
EXTRACT(来自时间戳的字段),EXTRACT(来自interval 的字段)
这EXTRACT(field FROM source)函数从date/time值中检索子字段,例如年或hour。源必须是时间戳、time或interval 类型的值表达式。该字段是一个标识符或字符串,用于选择要从源值中提取的字段。EXTRACT 函数返回double precision类型的值。以下是有效的字段名称(类似于 DATE_PART 函数字段名称):世纪、日、十年、道、道伊、纪元、hour、等道、等年、微second、千年、毫second、分钟、月、季度、second、时区、时区hour, timezone_minute, 周, 年。以下是 EXTRACT( 'field' , source) 函数的示例 - -
-
JUSTIFY_DAYS(interval ),JUSTIFY_HOURS(interval ),JUSTIFY_INTERVAL(interval )
序号 函数说明 1 JUSTIFY_DAYS(interval)调整interval ,以便将 30 day的time段表示为月。返回interval类型2 JUSTIFY_HOURS(interval)调整interval ,以便将 24 hourtime段表示为day。返回interval类型3 JUSTIFY_INTERVAL(interval)使用 JUSTIFY_DAYS 和 JUSTIFY_HOURS 调整interval ,并进行额外的符号调整。返回interval类型以下是 ISFINITE() 函数的示例 -