Kingbase-数据类型4-日期/时间类型

5 日期 / 时间类型
KingbaseES 支持 SQL 中所有的日期和时间类型,如下表所示。这些数据类型上可用的操作如 时间 / 日期函数
和操作符 所述。日期根据公历来计算,即使对于该历法被引入之前的年份也一样。
7.5.1: 日期 / 时间类型
名字
存储
尺寸
描述
最小值
最大值
解析
timestamp[ (p )] [ without
time zone ]
8
包括日期和时间(无
时区)
4713 BC
294276 AD
1
timestamp[ (p ) ] with
time zone
8
包括日期和时间,有
时区
4713 BC
294276 AD
1
timestamp[ (p )] with lo
cal time zone
8
包括日期和时间,有
时区
4713 BC
294276 AD
1
date
4
日期(没有一天中的
时间)
4713 BC
5874897 AD
1
time [ (p ) ] [ without time
zone ]
8
一天中的时间(无日
期)
00:00:00
24:00:00
1
time [ (p ) ] with time zone
12
字节
仅仅是一天中的时
间(没有日期),带
有时区
00:00:00+1459
24:00:00-
1459
1
int erval [ fields ] [
( “p“ ) ]
16
字节
时间间隔
-178000000
178000000
1
Note: SQL 要求只写 timestamp 等效于 timestamp without time zone ,并且 KingbaseES 鼓励这
种行为。 timestamptz 被接受为 timestamp with time zone 的一种简写,这是一种 KingbaseES 的扩
展。
time timestamp interval 接受一个可选的精度值 “p“ ,这个精度值声明在秒域中小数点之后保留的
位数。缺省情况下,在精度上没有明确的边界。 “p“ 允许的范围是从 0 6
interval 类型有一个附加选项,它可以通过写下面之一的短语来限制存储的 fields 的集合:
YEAR
MONTH
DAY
HOUR
MINUTE
SECOND
YEAR TO MONTH
YEAR_MONTH
DAY TO HOUR
DAY_HOUR
DAY TO MINUTE
DAY_MINUTE
DAY TO SECOND
DAY_SECOND
HOUR TO MINUTE
HOUR_MINUTE
HOUR TO SECOND
HOUR_SECOND
MINUTE TO SECOND
MINUTE_SECOND
Note: YEAR_MONTH DAY_HOUR DAY_MINUTE DAY_SECOND HOUR_MINUTE HOUR_SECOND
MINUTE_SECOND 是兼容 mysql unit 类型,需要通过 mysql_interval_style 参数开启, set mysql_interval_style to
on
注意如果 “fields“ “p“ 被指定, “fields“ 必须包括 SECOND ,因为精度只应用于秒。
类型 time with time zone SQL 标准定义的,但是该定义显示出了一些会影响可用性的性质。在大
多数情况下, date time timestamp without time zone timestamp with time zone 的组
合就应该能提供任何应用所需的全范围的日期 / 时间功能。
5.1 日期 / 时间输入
日期和时间的输入可以接受几乎任何合理的格式,包括 ISO 8601 SQL- 兼容的、传统 KINGBASE 的和其他
的形式。对于一些格式,日期输入里的日、月和年的顺序会让人混淆,并且支持指定所预期的这些域的顺序。
DateStyle 参数设置为 MDY ,就是选择“月-日-年”的解释,设置为 DMY 就是“日-月-年”,而 YMD
是“年-月-日”。
KingbaseES 在 处 理 日 期 / 时 间 输 入 输 出 上 比 SQL 标 准 要 求 的 更 灵 活。 当 前 KingbaseES 存 在
四 个 STRING 类 型 的 参 数 NLS_DATE_FORMAT ORA_DATE_STYLE NLS_TIMESTAMP_FORMAT
NLS_TIMESTAMP_TZ_FORMAT ,默认值分别为 YYYY-MM-DD HH24:MI:SS YYYY-MM-DD HH24:MI:SS
YYYY-MM-DD HH24:mi:ss.FF YYYY-MM-DD HH24:mi:ss.FF TZH:TZM ,分别可由用户在一次连接中进行
指定 date date timestamp timestamptz 的格式。例如将 NLS_DATE_FORMAT 参数设置为 YYYY-MM-DD
格式后,查询时 date 类型将默认输出‘ 2021-08-01 ’、‘ 1985-12-28 ’等样式的字符串;输入时,将默认按
YYYY-MM-DD 格式解析,能正确解析‘ 2021-08-01 ’、‘ 1985-12-28 ’等样式字符串日期,而无法解析
08.01.2021 ’、‘ 12.28.1985 ’等样式字符串。 ORA_DATE_STYLE 定义 date NLS_TIMESTAMP_FORMAT
NLS_TIMESTAMP_TZ_FORMAT 分别定义 timestamp timestamptz 类型的格式,皆同 NLS_DATE_FORMAT
数类似,影响日期 / 时间的默认输入与输出格式,此处不再赘述。具体的日期 / 时间输入输出格式的定义请参考
据类型格式化函数 章节。注意: NLS_DATE_FORMAT ORA_DATE_STYLE NLS_TIMESTAMP_FORMAT
NLS_TIMESTAMP_TZ_FORMAT 参数需在 Oracle 模式下,且参数 ORA_STYLE_NLS_DATE_FORMAT 处于
打开的情况下生效。
请记住任何日期或者时间的文字输入需要由单引号包围,就象一个文本字符串一样。参考 其他类型的常量获
取更多信息。 SQL 要求下面的语法
type [ (p) ] 'value'
其中 “p“ 是一个可选的精度声明,它给出了在秒域中的小数位数目。精度可以被指定给 time timestamp
interval 类型,并且可以取从 0 6 的值。这允许前文所述的值。如果在一个常数声明中没有指定任
何精度,它将默认取文字值的精度(但不能超过 6 位)。
5.1.1 日期
7.5.2 显示了 date 类型可能的输入方式。
7.5.3: 日期输入
例子
描述
1999-01-08
ISO 8601; 任何模式下的 1 8 日(推荐格式)
January 8, 1999
在任何 datestyle 输入模式下都无歧义
1/8/1999
MDY 模式中的 1 8 日; DMY 模式中的 8 1
1/18/1999
MDY 模式中的 1 18 日;在其他模式中被拒绝
01/02/03
MDY 模式中的 2003 1 2 日; DMY 模式中的 2003 2 1 日; YMD 模式中的 2001
2 3
1999-Jan-08
任何模式下的 1 8
Jan-08-1999
任何模式下的 1 8
08-Jan-1999
任何模式下的 1 8
99-Jan-08
YMD 模式中的 1 8 日,否则错误
08-Jan-99
1 8 日,除了在 YMD 模式中错误
Jan-08-99
1 8 日,除了在 YMD 模式中错误
19990108
ISO 8601; 任何模式中的 1999 1 8
990108
ISO 8601; 任何模式中的 1999 1 8
19990108
年和一年中的日子
J2451187
儒略日期
January 8, 99
BC
公元前 99
5.1.2 时间
当日时间类型是 time [ (p ) ] without time zone time [ (p ) ] with time zone 。只写 time 等效于 time
without time zone
这些类型的有效输入由当日时间后面跟着可选的时区组成(参阅 7.5.4 7.5.3 )。如果在 time
without time zone 的输入中指定了时区,那么它会被无声地忽略。你也可以指定一个日期但是它会被
忽略,除非你使用了一个涉及到夏令时规则的时区,例如 America/New_York 。在这种情况下,为了判断
是应用了标准时间还是夏令时时间,要求指定该日期。适当的时区偏移被记录在 time with time zone
值中。
7.5.4: 时间输入
例子
描述
04:05:06.789
ISO 8601
04:05:06
ISO 8601
04:05
ISO 8601
040506
ISO 8601
04:05 AM
04:05 一样, AM 并不影响值
04:05 PM
16:05 一样,输入的小时必须为 <= 12
04:05:06.789-8
ISO 8601
04:05:06-08:00
ISO 8601
04:05-08:00
ISO 8601
040506-08
ISO 8601
04:05:06 PST
缩写指定的时区
2003-04-12 04:05:06 America/New_York
全名指定的时区
7.5.5: 时区输入
例子
描述
PST
缩写(太平洋标准时间)
America/New_York
完整时区名
PST8PDT
POSIX 风格的时区声明
-8:00
PST ISO-8601 偏移
-800
PST ISO-8601 偏移
-8
PST ISO-8601 偏移
zulu
UTC 的军方缩写
z
zulu 的短形式
参考 数据类型 可以了解如何指定时区。
5.1.3 时间戳
时间戳类型的有效输入由一个日期和时间的串接组成,后面跟着一个可选的时区,一个可选的 AD 或者 BC
(另外, AD / BC 可以出现在时区前面,但这个顺序并非最佳)。因此:
1999 - 01 - 08 04 : 05 : 06
和:
1999 - 01 - 08 04 : 05 : 06 - 8 : 00
都是有效的值,它遵循 ISO 8601 标准。另外,使用广泛的格式:
January 8 04 : 05 : 06 1999 PST
也被支持。
SQL 标准通过“ + ”或者“ - ”符号的存在以及时间后面的时区偏移来区分 timestamp without time
zone timestamp with time zone 文字。因此,根据标准,
TIMESTAMP '2004-10-19 10:23:54'
是一个 timestamp without time zone ,而
TIMESTAMP '2004-10-19 10:23:54+02'
是一个 timestamp with time zone KingbaseES 从来不会在确定文字串的类型之前检查其内容,因此
会把上面两个都看做是 timestamp without time zone 。因此要保证把上面的文字当作 timestamp
with time zone 看待,就要给它正确的显式类型:
TIMESTAMP WITH TIME ZONE '2004-10-19 10:23:54+02'
如果一个文字已被确定是 timestamp without time zone KingbaseES 将不声不响忽略任何其中指出
的时区。即,结果值是从输入值的日期 / 时间域衍生出来的,并且没有就时区进行调整。
对于 timestamp with time zone ,内部存储的值总是 UTC (全球统一时间,以前也叫格林威治时间
GMT )。如果一个输入值有明确的时区声明,那么它将用该时区合适的偏移量转换成 UTC 。如果在输入串里
没有时区声明,那么它就被假设是在系统的 TimeZone 参数里的那个时区,然后使用这个 timezone 时区的
偏移转换成 UTC
如果一个 timestamp with time zone 值被输出,那么它总是从 UTC 转换成当前的 timezone 时区,
并且显示为该时区的本地时间。要看其它时区的时间,要么修改 timezone ,要么使用 AT TIME ZONE
造(参阅 AT TIME ZONE )。
timestamp without time zone timestamp with time zone 之 间 的 转 换 通 常 假 设
timestamp without time zone 值应该以 timezone 本地时间的形式接受或者写出。为该转换指
定一个不同的可以用 AT TIME ZONE
7.5.1.4 特殊值
为了方便, KingbaseES 支持一些特殊日期 / 时间输入值,如表 5-5 所示。这些值中 infinity -infinity
被在系统内部以特殊方式表示并且将被原封不动地显示。但是其他的仅仅只是概念上的速写,当被读到的时
候会被转换为正常的日期 / 时间值(特殊地, now 及相关串在被读到时立刻被转换到一个指定的时间值)。在
作为常量在 SQL 命令中使用时,所有这些值需要被包括在单引号内。
7.5.6: 特殊日期 / 时间输入
输入串
合法类型
描述
epoch
date , timestamp
1970-01-01 00:00 :00+00 Unix 系统时间 0
infinity
date , timestamp
比任何其他时间戳都晚
-infinity
date , timestamp
比任何其他时间戳都早
now
date , time , timestamp
当前事务的开始时间
today
date , timestamp
当日午夜
tomorrow
date , timestamp
明日午夜
yesterday
date , timestamp
昨日午夜
allballs
time
00:00:00.00 UTC
下列 SQL- 兼容的函数可以被用来为相应的数据类型获得当前时间值: CURRENT_DATE CURRENT_TIME
CURRENT_TIMESTAMP LOCALTIME LOCALTIMESTAMP 。后四种接受一个可选的亚秒精度声明(参见
/ 日期函数和操作符
5.2 日期时间输出
时间 / 日期类型的输出格式可以设成四种风格之一: ISO 8601 SQL Ingres )、传统的 KINGBASE Unix date
格式)或 German 。缺省是 ISO 格式( ISO 标准要求使用 ISO 8601 格式。 ISO 输出格式的名字是历史偶然)。
下表显示了每种输出风格的例子。 date 输出通常只有日期或时间部分和例子中一致。不过, KINGBASE
格输出的是 ISO 格式的只有日期的值。
7.5.7: 日期 / 时间输出风格
风格声明
描述
例子
ISO
ISO 8601, SQL 标准
1997-12-17 07:37:16-08
SQL
传统风格
12/17/1997 07:37:16.00 PST
Kingbase
原始风格
Wed Dec 17 07:37:16 1997 PST
German
地区风格
17.12.1997 07:37:16.00 PST
Note: ISO 8601 指定使用大写字母 T 来分隔日期和时间。 KingbaseES 在输入上接受这种格式,但是在输出
时它采用一个空格而不是 T ,如上所示。和一些其他数据库系统一样,这是为了可读性以及与 RFC 3339
一致性。
SQL KINGBASE 风格中,如果 DMY 域顺序被指定,“日”将出现在“月”之前,否则“月”出现在“日”
之前(有关该设置如何影响输入值的解释,请参考 日期 / 时间类型 )。下表给出了例子。
7.5.8: 日期顺序习惯
datestyle 设置
输入顺序
例子输出
SQL, DMY
/ /
17/12/1997 15:37:16.00 CET
SQL, MDY
/ /
12/17/1997 07:37:16.00 PST
Kingbase, DMY
/ /
Wed 17 Dec 07:37:16 1997 PST
日期 / 时间风格可以由用户使用 SET datestyle 命令选取,在 kingbase.conf 配置文件里的参数 Dat
eStyle 设置或者在服务器或客户端的 KINGBASE_DATESTYLE 环境变量里设置。
格式化函数 to_char (见 数据类型格式化函数 )也可以作为一个更灵活的方式来格式化日期 / 时间输出。
5.3 时区
时区和时区习惯不仅仅受地球几何形状的影响,还受到政治决定的影响。到了 19 世纪,全球的时区变得稍
微标准化了些,但是还是易于遭受随意的修改,部分是因为夏时制规则。 KingbaseES 使用广泛使用的 IANA
(Olson) 时区数据库来得到有关历史时区规则的信息。对于未来的时间,我们假设关于一个给定时区的最新已
知规则将会一直持续到无穷远的未来。
KingbaseES 努力在典型使用中与 SQL 标准的定义相兼容。但 SQL 标准在日期和时间类型和功能上有一些奇
怪的混淆。两个显而易见的问题是:
尽管 date 类型与时区没有联系,而 time 类型却可以有。然而,现实世界的时区只有在与时间和日
期都关联时才有意义,因为偏移(时差)可能因为实行类似夏时制这样的制度而在一年里有所变化。
缺省的时区会指定一个到 UTC 的数字常量偏移(时差)。因此,当跨 DST 边界做日期 / 时间算术时,我
们根本不可能适应于夏时制时间。
为了克服这些困难,我们建议在使用时区的时候,使用那些同时包含日期和时间的日期 / 时间类型。我们不建
议使用类型 time with time zone (尽管 KingbaseES 出于遗留应用以及与 SQL 标准兼容性的考虑支持
这个类型)。 KingbaseES 假设你用于任何类型的本地时区都只包含日期或时间。
在系统内部,所有时区相关的日期和时间都用 UTC 存储。它们在被显示给客户端之前会被转换成由 TimeZone
配置参数指定的本地时间。
KingbaseES 允许你使用三种不同形式指定时区:
一 个 完 整 的 时 区 名 字, 例 如 America/New_York 。 能 被 识 别 的 时 区 名 字 被 列 在
sys_timezone_names 视图中(参见 sys_timezone_names ) 。 KingbaseES 用广泛使用的 IANA
时区数据来实现该目的,因此相同的时区名字也可以在其他软件中被识别。
一个时区缩写,例如 PST 。这样一种声明仅仅定义了到 UTC 的一个特定偏移,而不像完整时区名那
样指出整套夏令时转换日期规则。能被识别的缩写被列在 sys_timezone_abbrevs 视图中(参见
sys_timezone_abbrevs )。你不能将配置参数 TimeZone log_timezone 设置成一个时区缩写,但是你可以
在日期 / 时间输入值和 AT TIME ZONE 操作符中使用时区缩写。
除了时区名和缩写, KingbaseES 将接受 POSIX- 风格的时区声明,形式为 “STD““offset“ “STD““offset““DST“
其中 “STD“ 是一个区域缩写、 “offset“ 是从 UTC 西起的以小时计的数字偏移量、 “DST“ 是一个可选的夏令
时区域缩写(被假定为给定偏移量提前一小时)。例如,如果 EST5EDT 还不是一个被识别的区域名,
它可以被接受并且可能和美国东海岸时间的功效相同。在这种语法中,一个时区缩写可以是一个字母
的字符串或者由尖括号( <> )包围的任意字符串。当一个夏令时区域缩写出现时,会假定根据 IANA
时区数据库的 posixrules 条目中使用的同一个夏令时转换规则使用它。在一个标准的 KingbaseES
安装中, posixrules US/Eastern 相同,因此 POSIX- 风格的时区声明遵循美国的夏令时规则。
如果需要,你可以通过替换 posixrules 文件来调整这种行为。
简而言之,在缩写和全称之间是有不同的:缩写表示从 UTC 开始的一个特定偏移量,而很多全称表示一个
本地夏令时规则并且因此具有两种可能的 UTC 偏移量。例如, 2014-06-04 12:00 America/New_York
表示纽约本地时间的中午,这个特殊的日期是东部夏令时间( UTC-4 )。因此 2014-06-04 12:00 EDT
定的是同一个时间点。但是 2014-06-04 12:00 EST 指定东部标准时间的中午( UTC-5 ),不管在那个日
期夏令时是否生效。
更要命的是,某些行政区已经使用相同的时区缩写在不同的时间表示不同的 UTC 偏移量。例如,在莫斯科
MSK 在某些年份表示 UTC+3 而在另一些年份表示 UTC+4 KingbaseES 会根据在指定的日期它们到底表示什
么(或者最近表示什么)来解释这种缩写。但是,正如上面的 EST 例子所示,这并不是必须和那一天的本
地标准时间相同。
你应该注意到 POSIX- 风格的时区特性可能导致伪造的输入被接受,因为它没有对区域缩写合理性的检查。
例如 SET TIMEZONE TO FOOBAR0 将会正常工作,让系统实际使用一个相当奇怪的 UTC 缩写。另一个需
要记住的问题是在 POSIX 时区名中,正值的偏移量被用于格林威治以西的位置。在其他情况下, KingbaseES
将遵循 ISO-8601 惯例,认为正值的时区偏移量是格林威治以东。
在所有情况下,时区名及其缩写都是大小写不敏感的(这是对 KingbaseES V7 之前版本的一个修改,在这些
版本中某些环境下时区名是大小写敏感的而在另外一些环境中却是大小写不敏感的)。
时区名和缩写都不是硬写在服务器中的,它们是从存储在安装目录下的 .../share/timezone/ .../
share/timezonesets/ 子目录中获取的。
TimeZone 配置参数可以在文件 kingbase.conf 中被设置,或者使用 服务器配置参数参考手册中描述的
任何一种标准方法设置。同时也有一些特殊的方法来设置它:
• SQL 命令 SET TIME ZONE 为会话设置时区。它是 SET TIMEZONE TO 的另一种拼写,它更加符合
SQL 的语法。
• libkci 客户端使用 KCITZ 环境变量来通过连接发送一个 SET TIME ZONE 命令给服务器。
5.4 间隔输入
interval 值可以使用下列语法书写:
[@] quantity unit [quantity unit...] [direction]
其中 “quantity“ 是一个数字(很可能是有符号的); “unit“ 是毫秒、 millisecond second minute hour
day week month year decade century millennium 或者缩写或者这些单位的复数; “direction“
以是 ago 或者为空。 At 符号( @ )是一个可选的噪声。不同单位的数量通过合适的符号计数被隐式地添加。
ago 对所有域求反。如果 IntervalStyle 被设置为 kingbase_verbose ,该语法也被用于间隔输出。
日、小时、分钟和秒的数量可以不适用显式的单位标记指定。例如, '1 12:59:10' 被读作 '1 day 12
hours 59 min 10 sec' 。同样,一个年和月的组合可以使用一个横线指定,例如 '200-10' 被读作 '200
10 个月 ' (这些较短的形式事实上是 SQL 标准唯一许可的形式,并且在 IntervalStyle 被设置为
sql_standard 时用于输出)。
间隔值也可以被写成 ISO 8601 时间间隔,使用该标准 4.4.3.2 小节的“带标志符的格式”或者 4.4.3.3 小节的
“替代格式”。带标志符的格式看起来像这样:
P quantity unit [ quantity unit ...] [ T [ quantity unit ...]]
该串必须以一个 P 开始,并且可以包括一个引入当日时间单位的 T 。可用的单位缩写在表 5-8 中给出。单
位可以被忽略,并且可以以任何顺序指定,但是小于一天的单位必须出现在 T 之后。特别地, M 的含义取决
于它出现在 T 之前还是之后。
7.5.9: 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' 中的负号会被应用于日、小时、分钟和秒部分。 KingbaseES 允许域具有不同的符
号,并且在习惯上认为以文本表示的每个域具有独立的符号,因此在这个例子中小时、分钟和秒部分被认为
是正值。如果 IntervalStyle 被设置为 sql_standard ,则一个领头的符号将被认为是应用于所有域
(但是仅当没有额外符号出现)。否则将使用传统的 KingbaseES 解释。为了避免混淆,我们推荐在任何域为负
值时为每一个域都附加一个显式的符号。
在 冗 长 的 输 入 格 式 中, 以 及 在 更 紧 凑 输 入 格 式 的 某 些 域 中, 域 值 可 以 有 分 数 部 分; 例 如 '1.5
week' '01:02:03.45' 。这样的输入被转换为合适的月数、日数和秒数用于存储。当这样会导致月
和日中的分数时,分数被加到低序域中,使用的转换因子是 1 =30 日和 1 =24 小时。例如, '1.5
month' 会变成 1 月和 15 日。只有秒总是在输出时被显示为分数。
下表展示了一些有效 interval 输入的例子。
7.5.10: 间隔输入
例子
描述
1-2
SQL 标准格式: 1 2 个月
3 4:05:06
SQL 标准格式: 3 4 小时 5 分钟 6
1 year 2 months 3 days 4 hours 5 minutes 6 seconds
传统 Kingbase 格式: 1 2 个月 3 4 小时 5 分钟 6 秒钟
P1Y2M3DT4h4M6S
“带标志符的” ISO 8601 格式:含义同上
P0001-02-03T04:05:06
ISO 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
开启兼容 mysql interval 参数后, interval 兼容了部分 mysql unit 类型和部分操作符 ,quantity 支持字符和布尔类
型。 mysql interval 兼容通过参数: mysql_interval_style 控制。兼容后 interval 值可以使用下列语法书写:
[@] interval expr unit
兼容以下 mysql unit:
1) YEAR_MONTH 等价于 YEAR TO MONTH
2) DAY_HOUR 等价于 DAY TO HOUR
3) DAY_MINUTE 等价于 DAY TO MINUTE
4) DAY_SECOND 等价于 DAY TO SECOND
5) HOUR_MINUTE 等价于 HOUR TO MINUTE
6) HOUR_SECOND 等价于 HOUR TO SECOND
7) MINUTE_SECOND 等价于 MINUTE TO SECOND
expr 支持以下操作符 :
1 + 支持两个整型或字符串或布尔类型相加;
2 - 支持两个整型或字符串或布尔类型相减;
3 * 支持两个整型或字符串或布尔类型相乘;
4 / 支持两个整型或字符串或布尔类型相除;
5 % 支持两个整型或字符串或布尔类型取余;
6 ^ 支持两个整型或字符串或布尔类型次方;
7 < 支持两个整型或字符串或布尔类型小于比较;
8 > 支持两个整型或字符串或布尔类型大于比较;
9 = 支持两个整型或字符串或布尔类型相等比较;
10 >= 支持两个整型或字符串或布尔类型大于等于比较;
11 <= 支持两个整型或字符串或布尔类型小于等于比较;
12 != 支持两个整型或字符串或布尔类型不等于比较;
13 <> 支持两个整型或字符串或布尔类型不等于比较;
14 | 支持两个整型或字符串或布尔类型相等比较;
15 || 支持两个整型或字符串或布尔类型连接操作;
部分特殊运算操作结果和 mysql 不完全相等, KingbaseES 对于空字符串进行计算返回 null,mysql 返回原数
据。由于 kingbaseES mysql 的时间字符串的格式不一致, mysql 将“ xx:xx:xx ”格式的时间处理为年月日,
KingbaseES 处理为时分秒,该特性暂不做兼容,所以对该格式的时间运算时表现为不同的结果。 KingbaseES
对于 0^0 计算结果与 mysql 存在差异,对于 KES ,意义为 0 0 次方,在通常情况下,该操作无意义, Kingbase
的结算结果为 1 。对于 mysql ^ 为异或操作符, mysql 计算结果为 0 ,暂时也不对该问题进行兼容。
5.5 间隔输出
间隔类型的输出格式可以被设置为四种风格之一: sql_standard kingbase kingbase_verbose
iso_8601 ,设置方法使用 SET intervalstyle 命令。默认值为 kingbase 格式。 7.5.10 展示了每
种输出风格的例子。
如果间隔值符合 SQL 标准的限制(仅年 - 月或仅日 - 时间,没有正负值部分的混合), sql_standard 风格为
间隔文字串产生符合 SQL 标准规范的输出。否则输出将看起来像一个标准的年 - 月文字串跟着一个日 - 时间文
字串,并且带有显式添加的符号以区分混合符号的间隔。
DateStyle 参数被设置为 ISO 时, kingbase 风格的输出匹配 KingbaseES V8 版本以前的输出。
DateStyle 参数被设置为非 ISO 输出时, kingbase_verbose 风格的输出匹配 KingbaseES V8 版本
以前的输出。
iso_8601 风格的输出匹配在 ISO 8601 标准的 4.4.3.2 小节中描述的“带标志符的格式”。
7.5.11: 间隔输出风格例子
风格声明
- 月间隔
- 时间间隔
混合间隔
sql_standard
1-2
3 4:05:06
-1-2 +3 -4:05:06
kingbase
1 year 2 mons
3 days 04:05:06
-1 year -2 mons +3 days -04:05:06
kingbase_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_8601
P1Y2M
P3DT4h4M6S
P-1Y-2M3DT-4H-5M-6S
  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值