第五十九章 SQL函数 GETDATE
第五十九章 SQL函数 GETDATE
日期/时间函数,返回当前本地日期和时间。
大纲
GETDATE([precision])
参数
precision
- 可选-一个正整数,指定时间精度为小数秒的位数。
默认值是0
(没有小数秒);
这个默认值是可配置的。
精度值是可选的,括号是必选的。
描述
GETDATE
将此时区的当前本地日期和时间作为时间戳返回;它根据本地时间变量(如夏令时)进行调整。
GETDATE
可以返回%TIMESTAMP
数据类型格式(yyyy-mm-dd hh:mm:ss.ffff
)或%PosiTime
数据类型格式(编码的64
位有符号整数)的时间戳。以下规则确定返回哪种时间戳格式:
-
如果当前时间戳被提供给数据类型为
%PosiTime
的字段,则当前时间戳值将以POSIXTIME
数据类型格式返回。例如,WHERE PosixField=GETDATE() or INSERT INTO MyTable (PosixField) VALUES (GETDATE())
-
如果当前时间戳被提供给数据类型为
%TIMESTAMP
的字段,则当前时间戳值将以TIMESTAMP数据类型格式返回。其ODBC类型为TIMESTAMP
,长度为16
,精度为19
,例如WHERE TSField=GETDATE() or INSERT INTO MyTable (TSField) VALUES (GETDATE())
-
如果当前时间戳是在没有上下文的情况下提供的,则当前时间戳值以
TIMESTAMP
数据类型格式返回。例如,选择GETDATE()
。
要更改默认日期时间字符串格式,请使用带有各种日期和时间选项的set option
命令。
GETDATE
可以在SELECT
语句SELECT LIST
或查询的WHERE
子句中使用。在设计报表时,可以使用GETDATE
在每次生成报表时打印当前日期和时间。GETDATE
对于跟踪活动也很有用,比如记录事务发生的时间。
可以在CREATE TABLE
中使用GETDATE
指定字段的默认值。GETDATE
是CURRENT_TIMESTAMP
的同义词,提供GETDATE
是为了与Sybase和Microsoft SQL Server兼容。
CURRENT_TIMESTAMP
和NOW
函数还可以用于以时间戳或POSIXTIME
格式将当前本地日期和时间作为时间戳返回。CURRENT_TIMESTAMP
支持精度,现在不支持精度。
要仅返回当前日期,请使用CURDATE
或CURRENT_DATE
。要仅返回当前时间,请使用CURRENT_TIME
或CURTIME
。这些函数使用日期或时间数据类型。这些函数都不支持精度。
TIMESTAMP
数据类型以相同的格式存储和显示其值。POSIXTIME
数据类型将其值存储为编码的64位有符号整数。时间和日期数据类型将它们的值存储为$HOROLOG
格式的整数。它们可以以显示格式或逻辑(存储)格式显示。可以使用CAST
或CONVERT
函数更改日期和时间的数据类型。
世界时(UTC)
GETDATE
返回当前本地日期和时间。除GETUTCDATE
之外,所有SQL时间戳、日期和时间函数都特定于本地时区设置。GETUTCDATE
将当前UTC
(通用)日期和时间作为时间戳值或POSIXTIME值返回。还可以使用ObjectScript $ZTIMESTAMP
特殊变量来获取通用的当前时间戳(独立于时区)。
精确到小数部分的秒
GETDATE
可以返回多达9位的精度。
使用precision
参数设置返回的精度的位数。precision
参数的默认值可以通过以下方式配置:
- 使用
TIME_PRECISION
选项设置OPTION
。 - 系统范围的
$SYSTEM.SQL.Util.SetOption()
方法配置选项DefaultTimePrecision
。
要确定当前设置,调用$SYSTEM.SQL.CurrentSettings()
,它显示默认的时间精度;
默认值为0。 - 进入管理门户,选择“系统管理”、“配置”、“SQL和对象设置”、“SQL”。
查看和编辑GETDATE()
、CURRENT_TIME
和CURRENT_TIMESTAMP
的默认时间精度的当前设置。
指定从0到9(包括9)的整数,作为返回的十进制精度的默认位数。
默认值为0。
实际返回的精度取决于平台;
超过系统中可用精度的精度数字将作为零返回。
分数秒总是被截断,而不是四舍五入到指定的精度。
示例
下面的示例以TIMESTAMP
格式返回当前日期和时间:
SELECT GETDATE() AS DateTime
2022/2/12 15:39:00
下面的示例以两位精度返回当前日期和时间:
SELECT GETDATE(2) AS DateTime
2022/2/12 15:39:21
下面的嵌入式SQL示例比较了本地(特定于时区)和通用(独立于时区)的时间戳:
ClassMethod GetDate()
{
&sql(SELECT GETDATE(),GETUTCDATE() INTO :a,:b)
if SQLCODE'=0 {
w !,"Error code ",SQLCODE }
else {
w !,"Local timestamp is: ",a
w !,"UTC timestamp is: ",b
w !,"$ZTIMESTAMP is: ",$ZDATETIME($ZTIMESTAMP,3,,3)
}
}
DHC-APP> d ##class(PHA.TEST.SQLCommand).GetDate()
Local timestamp is: 2022-02-12 15:40:34
UTC timestamp is: 2022-02-12 07:40:34
$ZTIMESTAMP is: 2022-02-12 07:40:34.978
下面的示例将Orders
表中所选行中的LastUpdate
字段设置为当前系统日期和时间。
如果LastUpdate
是数据类型%TimeStamp
, GETDATE
返回当前日期和时间作为ODBC时间戳;
如果LastUpdate
是数据类型%PosixTime
, GETDATE
返回当前日期和时间为编码的64位带符号整数:
UPDATE Orders SET LastUpdate = GETDATE()
WHERE Orders.OrderNumber=:ord
在下面的例子中,CREATE TABLE
语句使用GETDATE
为StartDate
字段设置一个默认值:
CREATE TABLE Employees(
EmpId INT NOT NULL,
LastName CHAR(40) NOT NULL,
FirstName CHAR(20) NOT NULL,
StartDate TIMESTAMP DEFAULT GETDATE())