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

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

表示为 timestamp_exp 的参数可以是列的名称、另一个标量函数的结果,也可以是 ODBC-time-escapeODBC-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-time-escapeODBC-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) 对于使用英语的数据源,返回一个字符串,其中包含数据源特定名称的日期 (例如星期日到星期六或星期日。到星期六;对于使用英语的数据源,返回通过 Samstag 的 Sonntag ,对于使用德语) date_exp的数据源。
DAYOFMONTH (date_exp) (ODBC 1.0) 以 1-31 范围内的整数值返回 date_exp 中的月份字段的月份日期。
DAYOFWEEK (date_exp) (ODBC 1.0) 根据 date_exp 中的周字段返回一周中的某一天,返回为 1-7 范围内的整数值,其中 1 表示星期日。
DAYOFYEAR (date_exp) (ODBC 1.0) 以 1-366 范围内的整数值的形式 ,根据date_exp 中的年份字段返回一年中的某一天。
从提取) 提取 (提取字段 (ODBC 3.0) 返回提取源的提取字段部分。 extract-source 参数是 datetime 或 interval 表达式。 extract-field 参数可以是以下关键字之一:

年月日小时分钟秒

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

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 是日期值,并且 interval 指定秒、秒、分钟或小时的小数部分,则 timestamp_exp 的时间部分在计算生成的时间戳之前设置为 0。

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

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

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

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

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