# 第三十六章 SQL函数 CURRENT_TIME 返回当前本地时间的日期/时间函数。 # 大纲 ``` CURRENT_TIME CURRENT_TIME(precision) ``` # 参数 - `precision` - 一个正整数,它将时间精度指定为小数位数。默认值为`0`(无小数秒);此默认值是可配置的。 `CURRENT_TIME`返回时间数据类型。 # 描述 `CURRENT_TIME`要么不带参数,要么带精度参数。不允许使用空参数括号。 `CURRENT_TIME`返回此时区的当前本地时间。它会根据当地时间变化(如夏令时)进行调整。 逻辑模式下的`CURRENT_TIME`以`$HOROLOG`格式返回当前本地时间;例如,`37065`。显示模式下的当前时间以区域设置的默认格式返回当前本地时间;例如,`10:18:27`。 要更改默认时间格式,请使用带有`time_format`和`time_PRECISION`选项的`SET OPTION`命令。可以配置分数秒的精度,如下所述。 要仅返回当前时间,请使用`CURRENT_TIME`或`CURTIME`。这些函数以时间数据类型返回它们的值。`CURRENT_TIMESTAMP`、`GETDATE`和`NOW`函数也可用于将当前日期和时间作为`TIMESTAMP`数据类型返回。 请注意,除`GETUTCDATE`之外,所有 SQL时间和日期函数都特定于本地时区设置。要获得通用的当前时间戳(独立于时区),可以使用`GETUTCDATE`或`ObjectScript $ZTIMESTAMP`特殊变量。 使用嵌入式SQL时,这些数据类型的执行方式不同。时间数据类型以`$HOROLOG`格式将值存储为整数(作为自午夜以来的秒数);以SQL显示时,它们将转换为时间显示格式;从嵌入式SQL返回时,它们将作为整数返回。时间戳数据类型存储并以相同格式显示其值。可以使用`CAST`或转换功能来更改时间和日期的数据类型。 `CURRENT_TIME`可以用作`CREATE TABLE`或`ALTER TABLE`中的默认规范关键字。`CURRENT_TIME`用作默认规范关键字时不能指定精度参数。 # 小数秒精度 当前的时间可以返回高达`9`位数的分数秒精度。精度位数的默认值可以使用以下配置: - 使用`TIME_PRECISION`选项设置选项。 - 系统范围的`$SYSTEM.SQL.Util.SetOption()`方法配置选项`DefaultTimePrecision`。 要确定当前设置,调用`$SYSTEM.SQL.CurrentSettings()`,它显示默认的时间精度; 默认值为0。 - 进入管理门户,选择“系统管理”、“配置”、“SQL和对象设置”、“SQL”。 查看和编辑`GETDATE()`、`CURRENT_TIME`和`CURRENT_TIMESTAMP`的默认时间精度的当前设置。 指定从`0`到`9`(包括`9`)的整数,作为返回的十进制精度的默认位数。 默认值为`0`。 实际返回的精度取决于平台; 超过系统中可用精度的数字将作为零返回。 # 示例 以下示例返回当前系统时间: ```sql SELECT CURRENT_TIME 9:10:27 ``` 下面的示例返回的是当前系统时间,精度为3位小数秒: ```sql SELECT CURRENT_TIME(3) 9:10:34 ``` 下面的嵌入式SQL示例返回当前时间。 因为这个时间是以`$HOROLOG`格式存储的,所以它被返回为一个整数: ```java ClassMethod CurrentTime() { &sql(SELECT CURRENT_TIME INTO :a) IF SQLCODE'=0 { WRITE !,"Error code ",SQLCODE } ELSE { WRITE !,"Current time is: ",a } } ``` ```java DHC-APP> d ##class(PHA.TEST.SQLCommand).CurrentTime() Current time is: 33104 ``` 下面的例子将`Contacts`表中选中行的`LastCall`字段设置为当前系统时间: ```sql UPDATE Contacts SET LastCall = CURRENT_TIME WHERE Contacts.ItemNumber=:item ```