系统管理-管理员手册-OQL查询语言-OQL基本语法
OQL基本语法
在OQL中当前只支持一种语句: SELECT
SELECT语句的语法如下:

- output_specification 表示想要检索对象的类,省略时默认为class_reference。它由一组类名组成时,第一个别名将确定所期望的主类是什么。
- class_reference 表示想要去查询的对象的类。
- class_joined 表示您想要连接的一系列类,以限制所选对象的集合(请记住,不用对具体列进行操作)。
- where_condition 是一个表达式,也就是SQL SELECT语句中的查询条件。
- 在iTop 2.2.0之后 oql_query 是另一个完整的OQL查询语句,它的查询结果将被添加到SELECT的结果中。
class_alias [, output_specification]
- class_alias 指的是在class_reference 或者 class_joined字句中声明的别名(class AS Alias_name)
class_name [AS class_alias]
- class_name 指的是需要查询的类名。
- class_alias 指的是引用类的别名,可以在WHERE字句中使用。
name | `name`
下列情况中必须使用倒引号:
- 类的名字和保留字冲突 (比如: JOIN…),
- 类的名字包含不希望出现的字符。
JOIN class_reference ON class_left.external_key join_operator class_right.id
- class_reference 指在JOIN左边或者右边的类,取决于数据模型和给定的外键。
- class_right.id 虽然不可能是其他值,但是必须指定:它引用了另一个对象指向的对象。如果给定了的话,Class_right是一个别名。
- class_left.external_key 指的是指向 class_right.id的类的对应属性。很多情况下,外键属性可以猜到,但是无论如何引用必须被清楚地指定。在2.2.0中最新:这个特殊的属性可以是 'AttributeObjectKey'类型。
- join_operator 连接操作符可以是 =, BELOW, BELOW STRICT, ABOVE 或者 ABOVE STRICT。BELOW,ABOVE 只能用于连接 AttributeHierarchicalKey类型的属性。
literal | function | attribute | expression operator expression | (expression)
- literal 是一个字符串(用单引号或者双引号括起来),或者一个数字(只支持整数). 版本2.0.1新引入: 十六进制符号支持无符号整数最大 2^64 (如: 0x2F6C585B5FEACF7A 不带引号)。
- function 是上述动词之一,参数使用逗号分隔的表达式列表。
- attribute 是一个定义在数据模型的对象属性的引用, class_ref.attribute_code – 使用倒引号解决保留字符或空白字符冲突是很必要的。
- operator 下列任何的二元运算符。
- expression 使用圆括号可以处理运算符之间的优先级别。
二元运算符接受两个操作数:左右各一。
运算符 | 描述 |
| AND | 逻辑与 |
| OR | 逻辑或 |
| / | 除法运 |
= | 等于 |
| >= | 大于等于 |
| > | 大于 |
| <= | 小于等于 |
| < | 小于 |
| - | 减法 |
| <> | 不等于 |
| LIKE | 简单模式匹配 |
| NOT LIKE | 简单模式非匹配 |
| IN | 列表 |
| NOT IN | 不在列表中 |
| & | 在2.0.1中新增:位操作符”and“。这个操作符不同于“逻辑”操作符“AND“,因为它对每个数字的位进行操作。 |
| | | 在2.0.1中新增:位操作符”or“。这个操作符不同于“逻辑”操作符“OR“,因为它对每个数字的位进行操作。 |
| ^ | 在2.0.1中新增:位操作符”xor“。异或。 |
| << | 在2.0.1中新增:位操作符左移。 |
| >> | 在2.0.1中新增:位操作符右移。 |
| [ /doc/refman/5.0/en/regexp.html]REGEXP | 正则表达式 |
| MATCHES | 在2.0.1中新增:全文匹配字符串。此操作符仅用于TagSet类型的属性。支持的语法是属性匹配'code1 code2' |
通配符
在编写OQL时,可以根据当前用户及其关联的联系人指定占位符。
| 占位符 | 内容 |
| :current_contact→id | 定义一个OQL“查询菜单”或者“dashlet”,返回用户依赖数据 |
| :current_contact→attribute | 联系人类的属性 |
| :current_user→attribute | 用户类的属性 |
例如,标准“帮助台”菜单“分配给我的请求(作为代理)”
函数
verb(expression[,expression [,expression...]...] ...])
- verb 是下面功能列表中的一个函数
在SQL中,所有函数实际上都映射到SQL对应的函数。换句话说,最终执行的SQL查询将使用相同的函数。
因此,这些函数的规范(参数的个数和类型、返回值)类似于底层数据库服务器的规范。任何限制或副作用都与数据库引擎的版本有关。
下面提供的超链接将指向mySQL 5.0的参考文档,是推荐的标准数据库引擎(用于OQL处理)文档。
- 函数名称区分大小写。在当前OQL实现中,必须大写,虽然MySQL不限制。
- 到目前为止,同义词还没有实现(对于给定的函数只有一个名称;例如:OQL实现了DAY,而mySQL实现DAY,并且把DAYOFMONTH作为函数的别名)
函数名称 | 描述 | 示例 |
| [ /doc/refman/5.0/en/control-flow-functions.html#function_if]IF | If/else 结构 | IF(a=b, 'equals', 'differs') |
| [ /doc/refman/5.0/en/string-functions.html#function_elt]ELT | 返回索引的字符串 | ELT(index, 'string1', 'string2', 'string3') |
| [ /doc/refman/5.0/en/string-functions.html#function_coalesce]COALESCE | 返回第一个非空参数 | COALESCE(field1, field2, 'Undefined') |
| [ /doc/refman/5.0/en/comparison-operators.html#operator_is-null]ISNULL | ISNULL(field1) | |
| [ /doc/refman/5.0/en/string-functions.html#function_concat]CONCAT | 返回连接后的字符串 | CONCAT(firstname, ' ', lastname) |
| [ /doc/refman/5.0/en/string-functions.html#function_substr]SUBSTR | 返回指定的子字符串 | SUBSTR('abcdef', 2, 3) |
| [ /doc/refman/5.0/en/string-functions.html#function_trim]TRIM | 删除开头和结尾的空格 | TRIM(' blah ') |
| [ /doc/refman/5.0/en/date-and-time-functions.html#function_date]DATE | 提取日期或日期时间表达式的日期部分 | DATE() |
| [ /doc/refman/5.0/en/date-and-time-functions.html#function_date-format]DATE_FORMAT | 指定格式日期 | DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y') |
| [ /doc/refman/5.0/en/date-and-time-functions.html#function_current-date]CURRENT_DATE | 返回当前日期 | CURRENT_DATE() |
| [ /doc/refman/5.0/en/date-and-time-functions.html#function_now]NOW | 返回当前日期和时间 | NOW() |
| [ /doc/refman/5.0/en/date-and-time-functions.html#function_time]TIME | 提取表达式的时间部分 | TIME() |
| [ /doc/refman/5.0/en/date-and-time-functions.html#function_to-days]TO_DAYS | 返回日期参数转换后的天数 | TO_DAYS('2009-05-01') |
| [ /doc/refman/5.0/en/date-and-time-functions.html#function_from-days]FROM_DAYS | 转换一个日期数为日期 | FROM_DAYS(12345) |
| [ /doc/refman/5.0/en/date-and-time-functions.html#function_year]YEAR | 返回日期的年 | YEAR(DATE()) |
| [ /doc/refman/5.0/en/date-and-time-functions.html#function_month]MONTH | 返回日期的月 | MONTH(DATE()) |
| [ /doc/refman/5.0/en/date-and-time-functions.html#function_day]DAY | 返回日期的日 (0-31) | DAY(DATE()) |
| [ /doc/refman/5.0/en/date-and-time-functions.html#function_date-add]DATE_ADD | 添加时间值(间隔)到日期。参见下面允许的间隔单位 | DATE_ADD(NOW(), INTERVAL 1 HOUR) |
| [ /doc/refman/5.0/en/date-and-time-functions.html#function_date-sub]DATE_SUB | 缩短时间值(间隔)到日期。参见下面允许的间隔单位 | DATE_SUB(NOW(), INTERVAL 5 MINUTE) |
| [ /doc/refman/5.0/en/mathematical-functions.html#function_%20round]ROUND | 返回参数X的四舍五入的数值。 | ROUND(12.356, 2) |
| [ /doc/refman/5.0/en/mathematical-functions.html#function_floor]FLOOR | 返回不大于参数的最大整数值 | FLOOR(12.356) |
| [ /doc/refman/5.0/en/miscellaneous-functions.html#function_inet-aton]INET_ATON | 返回IP地址的数值 | INET_ATON('15.15.121.12') |
| [ /doc/refman/5.0/en/miscellaneous-functions.html#function_inet-ntoa]INET_NTOA | 返回数值的IP地址 | INET_NTOA(1231654) |
DATE_ADD和DATE_SUB函数当前支持的时间间隔单位列表,MySQL中允许的值的子集。
OQL接受:
时间间隔单位 |
| YEAR |
| MONTH |
| DAY |
| HOUR |
| MINUTE |
| SECOND |