# 第三十四章 SQL函数 CURDATE 返回当前本地日期的标量日期/时间函数。 # 大纲 ``` {fn CURDATE()} {fn CURDATE} ``` # 描述 `CURDATE`不接受任何参数。它将当前本地日期作为数据类型`DATE`返回。请注意,参数括号是可选的。`CURDATE`返回此时区的当前本地日期;它根据本地时间变量(如夏令时)进行调整。 逻辑模式下的`CURDATE`以`$HOROLOG`格式返回当前本地日期; 例如,`64701`。 显示模式下的`CURDATE`以区域设置的默认格式返回当前本地日期。 例如,在美国的区域设置为`02/22/2018`,在欧洲的区域设置为`22/02/2018`,在俄罗斯的区域设置为`22.02.2018`。 要指定不同的日期格式,请使用`TO_DATE`函数。 要更改默认的日期格式,使用`SET OPTION`命令和`DATE_FORMAT`、`YEAR_OPTION`或`DATE_SEPARATOR`选项。 要只返回当前日期,请使用`CURDATE`或`CURRENT_DATE`。 这些函数返回`DATE`数据类型的值。 `CURRENT_TIMESTAMP`、`GETDATE`和`NOW`函数也可以作为`TIMESTAMP`数据类型返回当前日期和时间。 请注意,除了`GETUTCDATE`之外,所有 SQL时间和日期函数都特定于当地时区设置。 要获得通用的(独立于时区的)当前时间戳,你可以使用`GETUTCDATE`或ObjectScript `$ZTIMESTAMP`特殊变量。 在使用嵌入式SQL时,这些数据类型的性能不同。 DATE数据类型将值存储为`$HOROLOG`格式的整数; 当在SQL中显示时,它们被转换为日期显示格式; 当从嵌入式SQL返回时,它们作为整数返回。 `TIMESTAMP`数据类型以相同的格式存储和显示其值。 可以使用`CONVERT`函数来更改日期和时间的数据类型。 # 示例 下面的例子都返回当前日期: ```sql SELECT {fn CURDATE()} AS Today 2022/1/24 0:00:00 ``` ```sql SELECT {fn CURDATE} AS Today 2022/1/24 0:00:00 ``` 下面的嵌入式SQL示例返回当前日期。 因为这个日期是以`$HOROLOG`格式存储的,所以它被返回为一个整数: ```sql &sql(SELECT {fn CURDATE()} INTO :a) WRITE !,"Current date is: ",a ``` ```java DHC-APP>d ##class(PHA.TEST.SQLCommand).CurDate() Current date is: 66133 ``` 下面的例子展示了如何在`SELECT`语句中使用`CURDATE`返回所有发货日期相同或晚于今天日期的记录: ```sql SELECT * FROM Orders WHERE ShipDate >= {fn CURDATE()} ```