在数据库应用开发中不可避免会遇到大量的函数需求,而在 DB2 中提供了以下函数,它由 ODBC 通过供应商转义子句(vendor escape clauses)定义。可以使用转义子句语法或调用等价的 DB2 函数来调用每一个函数。
这些函数可划分为以下几类:
以下小节提供了若干表格,展示了从使用 DB2 CLI 的应用程序中调用这些函数时,哪些服务器(及最早版本)可以支持这些函数访问。
当连接到 DB2 Version 5 或更高版本时,以下函数检测到的所有错误将返回 SQLSTATE 38552。消息的文本部分采用 SYSFUN:nn 的形式,其中 nn 表示以下错误原因的代码:
本节介绍的字符串函数受 DB2 CLI 支持并由 ODBC 通过供应商转义子句定义。
| 字符串标量函数 | 说明 | 支持该函数的服务器 |
| ASCII( string_exp ) | 将 string_exp 的最左侧字符的 ASCII 码值作为整数返回。 | 面向工作站的 DB2 |
| CHAR( code ) | 返回其 ASCII 码值由 code 指定的字符。Code 的值应该介于 0 和 255 之间;否则,返回空值。 | 面向工作站的 DB2 |
| CONCAT( string_exp1, string_exp2 ) | 返回将 string_exp2 连接到 string_exp1 后产生的字符字符串。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| DIFFERENCE( string_exp1, string_exp2 ) | 返回一个整数值,该值表示 SOUNDEX 函数针对 string_exp1 和 string_exp2 的返回值之间的差异。 | 面向工作站、AS/400 的 DB2 |
| INSERT( string_exp1, start, length, string_exp2 ) | 返回一个字符字符串,使用包含 length 个字符的 string_exp2 代替从 start 开始的 length 个字符。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| LCASE( string_exp ) | 将 string_exp 中的所有大写字符转换为小写字符。 | 面向工作站、MVS、VM/VSE 的 DB2 |
| LEFT( string_exp,count ) | 返回 string_exp 最左侧的 count 个字符。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| LENGTH( string_exp ) | 返回 string_exp 中的字符数量,不包括结尾空白和字符串终止符。注意:在面向 MVS/ESA 的 DB2 中包含结尾空白。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| LOCATE( string_exp1, string_exp2 [ ,start ]) | 返回在 string_exp2 内 string_exp1 首次出现的初始位置。如果没有指定可选参数 start,则从 string_exp2 的第一个字符处开始搜索string_exp1 首次出现的位置。如果指定了 start 的值,将从 start 值指定的字符位置开始搜索。string_exp2 中的第一个字符位置使用值 1 表示。如果在 string_exp2 中没有找到 string_exp1,则返回 0。 | 面向工作站、MVS、AS/400 的 DB2 |
| LTRIM( string_exp ) | 返回 string_exp 的字符,同时删除前导空白。 | 面向工作站、MVS、AS/400 的 DB2 |
| REPEAT( string_exp, count ) | 返回由 string_exp 构成的重复了 count 次的字符字符串。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| REPLACE( string_exp1, string_exp2, string_exp3 ) | 使用string_exp3 替换 string_exp1 中出现的所有 string_exp2。 | 面向工作站、MVS 的 DB2 |
| RIGHT( string_exp, count ) | 返回string_exp 中最右侧的 count 个字符。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| RTRIM( string_exp ) | 返回 string_exp 的字符并删除结尾空白。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| SOUNDEX( string_exp1 ) | 返回一个 4 字符代码表示 string_exp1 的发音。注意,不同的数据源使用不同的算法表示 string_exp1 的发音。 | 面向工作站、AS/400 的 DB2 |
| SPACE( count ) | 返回由 count 个空格组成的字符字符串。 | 面向工作站、MVS、AS/400 的 DB2 |
| SUBSTRING( string_exp, start, length ) | 返回 string_exp 中的一个字符字符串,该字符串由从 start 指定的字符处开始的 length 个字符组成。 | 面向工作站、MVS、VM/VSE 、AS/400 的DB2 |
| UCASE( string_exp ) | 将 string_exp 中的所有小写字符转换为大写字符。 | 面向工作站、MVS、VM/VSE 、AS/400 的 DB2 |
本节介绍的数值函数受 DB2 CLI 支持并由 ODBC 通过供应商转义子句定义。
| 数值标量函数 | 说明 | 支持该函数的服务器 |
| ABS( numeric_exp ) | 返回 numeric_exp 的绝对值 | 面向工作站、MVS、AS/400 的 DB2 |
| ACOS( double_exp ) | 返回弧度为 double_exp 的角的反余弦。 | 面向工作站、MVS、AS/400 的 DB2 |
| ASIN( double_exp ) | 返回弧度为 double_exp 的角的反正弦。 | 面向工作站、MVS、AS/400 的 DB2 |
| ATAN( double_exp ) | 返回弧度为 double_exp 的角的反正切。 | 面向工作站、MVS、AS/400 的 DB2 |
| ATAN2( double_exp1, double_exp2 ) | 返回弧度分别为 double_exp1 和 double_exp2 的 x 和 y 坐标的反正切。 | 面向工作站、MVS、AS/400 的 DB2 |
| CEILING( numeric_exp ) | 返回大于或等于 numeric_exp 的最小整数。 | 面向工作站、MVS、AS/400 的 DB2 |
| COS( double_exp ) | 返回 double_exp 的余弦,其中 double_exp 是使用弧度表示的角。 | 面向工作站、MVS、AS/400 的 DB2 |
| COT( double_exp ) | 返回 double_exp 的余切,其中 double_exp 是使用弧度表示的角。 | 面向工作站、MVS、AS/400 的 DB2 |
| DEGREES( numeric_exp ) | 返回对 numeric_exp 弧度换算后的度数。 | 面向工作站、MVS、AS/400 的 DB2 |
| EXP( double_exp ) | 返回 double_exp 的指数值。 | 面向工作站、MVS、AS/400 的 DB2 |
| FLOOR( numeric_exp ) | 返回小于或等于 numeric_exp 的最大整数。 | 面向工作站、MVS、AS/400 的 DB2 |
| LOG( double_exp ) | 返回 double_exp 的自然对数。 | 面向工作站、MVS、AS/400 的 DB2 |
| LOG10( double_exp ) | 返回 double_exp 以 10 为基数的对数。 | 面向工作站、MVS、AS/400 的 DB2 |
| MOD( integer_exp1, integer_exp2 ) | 返回 integer_exp1 被 integer_exp2 除的余数(模数)。 | 面向工作站、MVS、AS/400 的 DB2 |
| PI() | 以浮点值形式返回 pi 的常量值。 | 面向工作站、MVS、AS/400 的 DB2 |
| POWER( numeric_exp, integer_exp ) | 返回 numeric_exp 的 integer_exp 次幂的值。 | 面向工作站、MVS、AS/400 的 DB2 |
| RADIANS( numeric_exp ) | 返回由 numeric_exp 度数换算得到的弧度值。 | 面向工作站、MVS、AS/400 的 DB2 |
| RAND( [integer_exp ] ) | 使用 integer_exp 作为种子值返回一个随机浮点值。 | 面向工作站、MVS、AS/400 的 DB2 |
| ROUND( numeric_exp, integer_exp. ) | 返回将 numeric_exp 四舍五入到小数点右边第 integer_exp 位后的值。如果 integer_exp 为负数,则将 numeric_exp 四舍五入到小数点右边第 |integer_exp| 位。 | 面向工作站、MVS、AS/400 的 DB2 |
| SIGN( numeric_exp ) | 返回 numeric_exp 的指示符或正负号。如果 numeric_exp 小于 0,则返回 -1。如果numeric_exp 等于 0,则返回 0。如果 numeric_exp 大于 0,则返回 1。 | 面向工作站、MVS、AS/400 的 DB2 |
| SIN( double_exp ) | 返回 double_exp 的正弦,其中 double_exp 是以弧度表示的角。 | 面向工作站、MVS、AS/400 的 DB2 |
| SQRT( double_exp ) | 返回 double_exp 的平方根。 | 面向工作站、MVS、AS/400 的 DB2 |
| TAN( double_exp ) | 返回 double_exp 的正切,其中 double_exp 是以弧度表示的角。 | 面向工作站、MVS、AS/400 的 DB2 |
| TRUNCATE( numeric_exp, integer_exp ) | 返回将 numeric_exp 截至小数点右第 integer_exp 位后的值。如果 integer_exp 为负数,则将 numeric_exp 截至小数点左边第 |integer_exp| 位。 | 面向工作站、MVS、AS/400 的 DB2 |
本节介绍的日期和时间函数受 DB2 CLI 支持并由 ODBC 通过供应商转义子句定义。
| 日期和时间标量函数 | 说明 | 支持该函数的服务器 |
| CURDATE() | 以日期值形式返回当前日期。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| CURTIME() | 以时间值形式返回当前的本地时间。 | 面向工作站、MVS、VM/VSE、AS/400的 DB2 |
| DAYNAME( date_exp ) | 返回一个字符字符串,其中包含 date_exp 的日期部分表示的星期名(星期日、星期一、星期二、星期三、星期四、星期五、星期六)。 | 面向工作站的 DB2 |
| DAYOFMONTH ( date_exp ) | 返回 date_exp 内表示一月中某一天的值,使用 1-31 中的整数值表示。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| DAYOFWEEK( date_exp ) | 返回 date_exp 内表示一周内某一天的值,使用 1-7 中的整数值表示,其中 1 表示星期日。 | 面向工作站、AS/400 (3.6) 的 DB2 |
| DAYOFWEEK_ISO( date_exp ) | 返回 date_exp 内表示一周之内某一天的值,使用 1-7 中的整数值表示,其中 1 表示星期一。 注意该函数与 DAYOFWEEK() 函数之间的区别,后者使用 1 表示星期日。 | 面向工作站、MVS、AS/400 的 DB2 |
| DAYOFYEAR( date_exp ) | 返回 date_exp 内表示一年内某一天的值,使用 1-366 中的整数值表示。 | 面向工作站、AS/400 的 DB2 |
| HOUR( time_exp ) | 返回 time_exp 中的时刻,使用 0-23 中的整数值表示。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| JULIAN_DAY( date_exp ) | 返回 date_exp 和公元前 4712 年 1 月 1 日(儒略日期历法的起始时间)之间间隔的天数。 | 面向工作站、AS/400 的 DB2 |
| MINUTE( time_exp ) | 返回 time_exp 内表示的分钟,使用 0-59 中的整数值表示。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| MONTH( date_exp ) | 返回 date_exp 内表示的月份,使用 1-12 中的整数值表示。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| MONTHNAME( date_exp ) | 返回一个字符字符串,其中包含 date_exp 的月份部分表示的月份名(一月、二月、三月、四月、五月、六月、七月八月、九月、十月、十一月、十二月)。 | 面向工作站的 DB2 |
| NOW() | 以时间戳值的形式返回当前的日期和时间。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| QUARTER( date_exp ) | 返回 date_exp 中表示的季度,使用 1-4 中的整数值表示。 | 面向工作站、AS/400 的 DB2 |
| SECOND( time_exp ) | 返回 time_exp 中表示的秒,使用 1-59 中的整数值表示。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| SECONDS_SINCE_MIDNIGHT( time_exp ) | 返回 time_exp 中相对于午夜的秒数,使用 0-86400 中的整数值表示。如果 time_exp 包括秒的小数部分,则将去掉小数部分。 | 面向工作站的 DB2 |
| TIMESTAMPADD( interval, integer_exp, timestamp_exp ) | 向 timestamp_exp 添加类型为 interval、值为 integer_exp 的时间间隔,返回计算得到的时间戳。有效的时间间隔值包括:
|
面向工作站的 DB2 |
| TIMESTAMPDIFF( interval, timestamp_exp1, timestamp_exp2 ) | 返回 interval 类型的时间间隔的整数值,其中 timestamp_exp2 大于 timestamp_exp1。有效的时间间隔值包括:
|
面向工作站的 DB2 |
| WEEK( date_exp ) | 返回 date_exp 中一年之内的某一周,使用 1-54 中的整数值表示。 | 面向工作站、AS/400 的 DB2 |
| WEEK_ISO( date_exp ) | 返回 date_exp 中表示一年内某一周,使用 1-53 中的整数值表示。第一周被定义为一年之中包含星期四的第一个星期。因此,第一周就是包含 1 月 4 日的第一个星期,因为星期一被认为是一周的第一天。 注意,WEEK_ISO() 不同于当前定义的 WEEK(),后者返回的最大值为 54。对于 WEEK() 函数,一年之中的第一周指包含第一个星期六的星期,相当于包含1月1日的星期,即使这一星期只包含一天。 | 面向工作站的 DB2 |
| YEAR( date_exp ) | 返回 date_exp 中表示某一年的值,使用 1-9999 中的整数值表示。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
对于返回的字符字符串中包含星期名或月份名的函数,将对这些字符字符串启用国家语言支持(National Language Support)。对于在 DB2 Version 7 或更高版本中创建的数据库,将自动获得 DAYOFWEEK_ISO() 和 WEEK_ISO() 支持。如果数据库使用 Version 7 之前的版本创建,则无法使用这些函数。要在这类数据库中使用 DAYOFWEEK_ISO() 和 WEEK_ISO() 函数,需要使用 db2updb 系统命令。
本节介绍的系统函数受 DB2 CLI 支持并由 ODBC 通过供应商转义子句定义。
| 系统标量函数 | 说明 | 支持该函数的服务器 |
| DATABASE() | 返回与连接句柄(connection handle,hdbc)相对应的数据库的名称(通过指定信息类型 SQL_DATABASE_NAME,也可借助 SQLGetInfo() 获得数据库名)。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| IFNULL( exp, value ) | 如果 exp 为空值,则返回 value。如果 exp 为非空值,则返回 exp。可能的 Value 数据类型必须与 exp 的数据类型兼容。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
| USER() | 返回用户的授权名称(通过指定信息类型 SQL_USER_NAME,也可借助 SQLGetInfo() 获得用户的授权名)。 | 面向工作站、MVS、VM/VSE、AS/400 的 DB2 |
转换函数受 DB2 CLI 支持并由 ODBC 通过供应商转义子句定义。
每个驱动程序和数据源可以确定两种可能的数据类型之间可以进行哪些有效转换。当驱动程序将 ODBC 语法转换为本地语法(native syntax)时,它将拒绝执行不受数据源支持的转换,即使 ODBC 语法有效。
使用 SQLGetInfo() 函数以及合适的转换函数掩码(mask)可以确定哪些转换受数据源支持。
| 转换标量函数 | 说明 | 支持该函数的服务器 |
| CONVERT( expr_value, data_type ) |
|
面向工作站的 DB2 |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15082138/viewspace-591943/ ,如需转载,请注明出处,否则将追究法律责任。