Link Search Menu Expand Document Documentation Menu

数据类型

下表显示了 SQL 插件支持的数据类型,以及每种数据类型如何映射到 SQL 和 OpenSearch 数据类型

OpenSearch SQL 类型 OpenSearch 类型 SQL 类型
布尔值 布尔值 BOOLEAN
byte byte TINYINT
short byte SMALLINT
整型 整型 INTEGER
长整型 (long) 长整型 (long) BIGINT
浮点型 浮点型 REAL
half_float 浮点型 FLOAT
scaled_float 浮点型 DOUBLE
双精度浮点型 双精度浮点型 DOUBLE
keyword 字符串 VARCHAR
text text VARCHAR
date 时间戳 TIMESTAMP
date_nanos 时间戳 TIMESTAMP
ip ip VARCHAR
binary binary VARBINARY
object struct STRUCT
nested 数组 STRUCT

除了此列表之外,SQL 插件还支持 datetime 类型,尽管它没有与 OpenSearch 或 SQL 对应的映射。要使用没有相应映射的函数,您必须将数据类型显式转换为具有映射的类型。

日期和时间类型

日期和时间类型表示一个时间段:DATETIMEDATETIMETIMESTAMPINTERVAL。默认情况下,OpenSearch DSL 使用 date 类型作为唯一包含绝对时间点所有信息的日期时间相关类型。

为了与 SQL 集成,除了 timestamp 类型之外的每种类型都包含部分时间段信息。要使用日期时间函数,请参阅 datetime。某些函数可能对输入参数类型有约束。

日期

date 类型表示日历日期,与时区无关。给定的日期值是一个 24 小时周期,但此周期在不同时区会有所不同,并且在夏令时期间可能具有灵活的小时数。date 类型不包含时间信息,并且只支持 1000-01-019999-12-31 的范围。

类型 语法 范围
date yyyy-MM-dd 0001-01-019999-12-31

时间

time 类型表示时钟时间,与时区无关。time 类型不包含日期信息。

类型 语法 范围
time hh:mm:ss[.fraction] 00:00:00.000000000023:59:59.9999999999

Datetime

datetime 类型是日期和时间的组合。它不包含时区信息。有关包含日期、时间和时区信息的绝对时间点,请参阅 Timestamp

类型 语法 范围
datetime yyyy-MM-dd hh:mm:ss[.fraction] 0001-01-01 00:00:00.00000000009999-12-31 23:59:59.9999999999

时间戳

timestamp 类型是一个独立于时区或约定的绝对实例。例如,对于给定的时间点,如果您将时间戳更改为不同的时区,其值会相应改变。

timestamp 类型的存储方式与其他类型不同。它在存储时从当前时区转换为 UTC,并在检索时从 UTC 转换回其设置的时区。

类型 语法 范围
时间戳 yyyy-MM-dd hh:mm:ss[.fraction] 0001-01-01 00:00:01.9999999999 UTC 到 9999-12-31 23:59:59.9999999999

间隔

interval 类型表示时间持续时间或一个时间段。

类型 语法
interval INTERVAL expr unit

expr 单位是任何最终迭代为数量值的表达式。它表示用于解释该数量的单位,包括 MICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEARINTERVAL 关键字和单位说明符不区分大小写。

interval 类型有两种间隔类别:年-周间隔和日-时间隔。

  • 年-周间隔存储年、季度、月和周。
  • 日-时间隔存储日、小时、分钟、秒和微秒。

日期和时间类型之间的转换

除了 interval 类型之外,所有日期和时间类型都可以相互转换。转换可能会改变值或导致某些信息丢失。例如,从 datetime 值中提取 time 值,或将 date 值转换为 datetime 值等等。

SQL 插件支持每种类型的以下转换规则:

从日期转换

  • 由于 date 值不包含任何时间信息,因此转换为 time 类型没有用,并且总是返回零时间值 00:00:00
  • 由于缺少时间信息,将 date 转换为 datetime 会进行数据填充。它默认将时间 00:00:00 附加到原始日期,并形成一个 datetime 实例。例如,将 2020-08-17 转换为 datetime 类型的结果是 2020-08-17 00:00:00
  • 转换为 timestamp 类型会改变 time 值和 timezone 信息。它将零时间值 00:00:00 和会话时区(默认为 UTC)附加到日期。例如,将 2020-08-17 转换为具有会话时区 UTC 的 datetime 类型是 2020-08-17 00:00:00 UTC

从时间转换

  • 您无法将 time 类型转换为任何其他日期和时间类型,因为它不包含任何日期信息。

从 datetime 转换

  • datetime 转换为 date 会从 datetime 值中提取日期值。例如,将 2020-08-17 14:09:00 转换为 date 类型的结果是 2020-08-17
  • datetime 转换为 time 会从 datetime 值中提取时间值。例如,将 2020-08-17 14:09:00 转换为 time 类型的结果是 14:09:00
  • 由于 datetime 类型不包含时区信息,转换为 timestamp 类型会用会话时区填充时区值。例如,将 2020-08-17 14:09:00 (UTC) 转换为 timestamp 类型的结果是 2020-08-17 14:09:00 UTC

从时间戳转换

  • timestamp 类型转换为 date 类型会提取日期值,转换为 time 类型会提取时间值。将 timestamp 类型转换为 datetime 类型仅提取 datetime 值并省略时区值。例如,将 2020-08-17 14:09:00 UTC 转换为 date 类型的结果是 2020-08-17,转换为 time 类型的结果是 14:09:00,转换为 datetime 类型的结果是 2020-08-17 14:09:00
剩余 350 字符

有问题?

想要贡献?