时间、日期和时间间隔函数

下表列出了 ODBC 标量函数集中包含的时间和日期函数。 应用程序可以通过调用信息类型为 SQL_TIMEDATE_FUNCTIONS 的 SQLGetInfo 来确定驱动程序支持的时间和日期函数。

表示为timestamp_exp的参数可以是列的名称、另一个标量函数的结果或 ODBC 时间转义、ODBC-date-escapeODBC-timestamp-escape,其中基础数据类型可以表示为SQL_CHAR、SQL_VARCHAR、SQL_TYPE_TIME、SQL_TYPE_DATE或SQL_TYPE_TIMESTAMP。

表示 为date_exp 的参数可以是列的名称、另一个标量函数的结果或 ODBC-date-escapeODBC-timestamp-escape,其中基础数据类型可以表示为SQL_CHAR、SQL_VARCHAR、SQL_TYPE_DATE或SQL_TYPE_TIMESTAMP。

表示 为time_exp 的参数可以是列的名称、另一个标量函数的结果或 ODBC 时间转义ODBC-timestamp-escape,其中基础数据类型可以表示为SQL_CHAR、SQL_VARCHAR、SQL_TYPE_TIME或SQL_TYPE_TIMESTAMP。

ODBC 3.0 中添加了 CURRENT_DATE、CURRENT_TIME 和 CURRENT_TIMESTAMP timedate 标量函数,以便与 SQL-92 保持一致。

函数 说明
CURRENT_DATE() (ODBC 3.0) 返回当前日期。
CURRENT_TIME[(时间精度)] (ODBC 3.0) 返回当前本地时间。 时间精度参数确定返回值的秒精度。
CURRENT_TIMESTAMP
[(时间戳精度)] (ODBC 3.0)
以时间戳值的形式返回当前本地日期和时间。 时间戳精度参数确定返回时间戳的秒精度。
CURDATE() (ODBC 1.0) 返回当前日期。
CURTIME() (ODBC 1.0) 返回当前本地时间。
DAYNAME(date_exp (ODBC 2.0) 返回一个字符串,该字符串包含日期的数据源特定名称(例如,星期日到星期六或太阳。通过 Sat。对于使用英语的数据源,对于使用德语的数据源,返回 Sonntag,对于使用德语的数据源),对于date_exp日期部分。
DAYOFMONTH(date_exp (ODBC 1.0) 根据date_exp中的月份字段返回月份的日期,该值为 1-31 范围内的整数值。
DAYOFWEEK(date_exp (ODBC 1.0) 根据date_exp中的周字段返回一周中的一天,该值为 1-7 范围内的整数值,其中 1 表示星期日。
DAYOFYEAR(date_exp (ODBC 1.0) 根据date_exp年份字段作为 1-366 范围内的整数值返回年份的一天。
EXTRACT(EXTRACT-field FROM extract-source (ODBC 3.0) 返回提取源提取字段部分。 提取源参数是日期/时间或间隔表达式。 提取字段参数可以是以下关键字之一:

年月日小时分钟秒

返回值的精度是实现定义的。 刻度为 0,除非指定 SECOND,在这种情况下,刻度不小于提取源字段的小数秒精度。
HOUR(time_exp (ODBC 1.0) 返回基于time_exp中的小时字段作为 0-23 范围内的整数值返回小时。
分钟(time_exp (ODBC 1.0) 根据time_exp中的分钟字段作为 0-59 范围内的整数值返回分钟。
月(date_exp (ODBC 1.0) 根据date_exp中的月份字段返回月份,作为 1-12 范围内的整数值。
MONTHNAME(date_exp (ODBC 2.0) 返回一个字符串,该字符串包含月份的数据源特定名称(例如,1 月到 12 月或 12 月)。对于使用英语的数据源,对于使用德语的数据源,返回 Januar 到 12 月,对于使用德语的数据源,则返回 date_exp月份部分。
NOW( ) (ODBC 1.0) 以时间戳值的形式返回当前日期和时间。
QUARTER(date_exp (ODBC 1.0) 1-4 为 1-4 范围内的整数值返回date_exp 季度,其中 1 表示 1 月 1 日至 3 月 31 日。
SECOND(time_exp (ODBC 1.0) 返回第二个基于time_exp的第二个字段作为 0-59 范围内的整数值。
TIMESTAMPADD(intervalinteger_exptimestamp_exp (ODBC 2.0) 返回通过将类型间隔的integer_exp间隔添加到timestamp_exp计算的时间戳。 间隔的有效值为以下关键字:

SQL_TSI_FRAC_SECOND

SQL_TSI_SECOND

SQL_TSI_MINUTE

SQL_TSI_HOUR

SQL_TSI_DAY

SQL_TSI_WEEK

SQL_TSI_MONTH

SQL_TSI_QUARTER

SQL_TSI_YEAR

其中小数秒以秒数十亿为单位表示。 例如,以下 SQL 语句返回每个员工的姓名及其一年周年日期:

SELECT NAME, {fn TIMESTAMPADD(SQL_TSI_YEAR, 1, HIRE_DATE)} FROM EMPLOYEES

如果timestamp_exp是一个时间值,并且间隔指定天、周、月、季度或年份,则timestamp_exp日期部分将设置为当前日期,然后计算生成的时间戳。

如果timestamp_exp是日期值,并且间隔指定小数秒、秒、分钟或小时数,则计算生成的时间戳之前,timestamp_exp的时间部分设置为 0。

应用程序通过使用SQL_TIMEDATE_ADD_INTERVALS选项调用 SQLGetInfo 来确定数据源支持的间隔。
TIMESTAMPDIFF(interval,timestamp_exp1,timestamp_exp2 (ODBC 2.0) 返回timestamp_exp2大于timestamp_exp1的类型间隔的整数数。 间隔的有效值为以下关键字:

SQL_TSI_FRAC_SECOND

SQL_TSI_SECOND

SQL_TSI_MINUTE

SQL_TSI_HOUR

SQL_TSI_DAY

SQL_TSI_WEEK

SQL_TSI_MONTH

SQL_TSI_QUARTER

SQL_TSI_YEAR

其中小数秒以秒数十亿为单位表示。 例如,以下 SQL 语句返回每个员工的姓名,以及已雇用的年数:

SELECT NAME, {fn TIMESTAMPDIFF(SQL_TSI_YEAR, {fn CURDATE()}, HIRE_DATE)} FROM EMPLOYEES

如果时间戳表达式是一个时间值,并且 间隔 指定天、周、月、季度或年份,则该时间戳的日期部分将设置为当前日期,然后计算时间戳之间的差异。

如果时间戳表达式是日期值,并且 间隔 指定小数秒、秒、分钟或小时数,则计算时间戳之间的差异之前,该时间戳的时间部分设置为 0。

应用程序通过使用SQL_TIMEDATE_DIFF_INTERVALS选项调用 SQLGetInfo 来确定数据源支持的间隔。
周(date_exp (ODBC 1.0) 根据date_exp中的周字段返回一年中的一周,作为 1-53 范围内的整数值。
年(date_exp (ODBC 1.0) 根据date_exp中的年份字段作为整数值返回年份。 范围依赖于数据源。