文章目录
- 第六十二章 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'
),也会返回零小时。
同时可以使用DATEPART
或DATENAME
返回信息。
也可以使用 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