文章
姚 鑫 · 二月 22 阅读大约需 3 分钟

第六十二章 SQL函数 HOUR

第六十二章 SQL函数 HOUR

Time函数,它返回DateTime表达式的小时数。

大纲

{fn HOUR(time-expression)}
  • time-expression - 作为列名、另一个标量函数的结果或字符串或数字文字的表达式。它必须解析为日期时间字符串或时间整数,其中基础数据类型可以表示为%Time%Timestamp%PosiTime

描述

Hour返回一个整数,指定给定时间或日期时间值的小时。小时是根据$HOROLOG$ZTIMESTAMP值、ODBC格式的日期字符串或时间戳计算的。

时间表达式时间戳可以是数据类型%Library.PosiTime(编码的64位有符号整数),也可以是数据类型%Library.TimeStamp(yyyy-mm-dd hh:mm:ss.fff)

要更改此默认时间格式,请使用SET OPTION命令。

请注意,可以提供时间整数(已用秒数),但不能提供时间字符串(hh:mm:ss)。必须提供日期时间字符串(yyyy-mm-dd hh:mm:ss)。可以省略日期时间字符串的秒(:ss)或分钟和秒(mm:ss)部分,但仍返回小时部分。日期时间字符串的时间部分必须是有效的时间值。未验证日期时间字符串的日期部分。

小时以24小时表示。小时数(HH)部分应该是介于0到23之间的整数。输入上的前导零是可选的;输出上不显示前导零。

当小时部分为“0”“00”时,小时返回0小时的值。如果没有提供时间表达式,或者如果省略了时间表达式的小时部分(':mm:ss''::ss'),也会返回零小时。

同时可以使用DATEPARTDATENAME返回信息。

也可以使用 HOUR()方法调用从ObjectScript调用此函数:

$SYSTEM.SQL.Functions.HOUR(time-expression)

示例

以下示例均返回数字18,因为时间表达式值为18:45:38

SELECT {fn HOUR('2017-02-16 18:45:38')} AS ODBCHour

18
SELECT {fn HOUR(67538)} AS HorologHour

18

下面的示例也返回18。时间值的秒(或分和秒)部分可以省略。

SELECT {fn HOUR('2017-02-16 18:45')} AS Hour_Given

18

下面的示例返回0小时,因为日期时间字符串的时间部分已被省略:

SELECT {fn HOUR('2017-02-16')} AS Hour_Given

0

以下示例均返回当前时间的小时部分:

SELECT {fn HOUR(CURRENT_TIME)} AS H_CurrentT,
       {fn HOUR({fn CURTIME()})} AS H_CurT,
       {fn HOUR({fn NOW()})} AS H_Now,
       {fn HOUR($HOROLOG)} AS H_Horolog,
       {fn HOUR($ZTIMESTAMP)} AS H_ZTS


16  16  16  16  8

请注意,$ZTIMESTAMP返回协调世界时(UTC)。其他时间表达式值返回本地时间。

下面的示例显示前导零被抑制。
第一个HOUR函数返回长度为2,其他函数返回长度为1
忽略的时间设为0小时,其长度为1:

SELECT LENGTH({fn HOUR('2018-02-15 11:45')}),
       LENGTH({fn HOUR('2018-02-15 03:45')}),
       LENGTH({fn HOUR('2018-02-15 3:45')}),
       LENGTH({fn HOUR('2018-02-15')})

2   1   1   1

下面的嵌入式SQL示例显示了HOUR函数识别为区域设置指定的timeseseparator字符:

ClassMethod Hour()
{
  d ##class(%SYS.NLS.Format).SetFormatItem("TimeSeparator",".")
  &sql(SELECT {fn HOUR('2018-02-16 18.45.38')} INTO :a)
  w "hour=",a
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).Hour()
hour=18
0
0 12
讨论 (0)1
登录或注册以继续