太帅 发表于 2020-12-4 15:12:30

系统管理-管理员手册-OQL查询语言-OQL基本语法

本帖最后由 adminlily 于 2020-12-4 16:37 编辑

OQL基本语法

在OQL中当前只支持一种语句: SELECTSELECT语句的语法如下:
SELECT   




[*]output_specification 表示想要检索对象的类,省略时默认为class_reference。它由一组类名组成时,第一个别名将确定所期望的主类是什么。
[*]class_reference 表示想要去查询的对象的类。
[*]class_joined 表示您想要连接的一系列类,以限制所选对象的集合(请记住,不用对具体列进行操作)。
[*]where_condition 是一个表达式,也就是SQL SELECT语句中的查询条件。
[*]在iTop 2.2.0之后 oql_query 是另一个完整的OQL查询语句,它的查询结果将被添加到SELECT的结果中。
output_specificationclass_alias [, output_specification]

[*]class_alias 指的是在class_reference 或者 class_joined字句中声明的别名(class AS Alias_name)
class_reference
class_name

[*]class_name 指的是需要查询的类名。
[*]class_alias 指的是引用类的别名,可以在WHERE字句中使用。
class_name or class_alias
name | `name`
下列情况中必须使用倒引号:

[*]类的名字和保留字冲突 (比如: JOIN…),
[*]类的名字包含不希望出现的字符。
class_joined
JOIN class_referenceON 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中新增:位操作符右移。
REGEXP正则表达式
MATCHES在2.0.1中新增:全文匹配字符串。此操作符仅用于TagSet类型的属性。支持的语法是属性匹配'code1 code2'



通配符
在编写OQL时,可以根据当前用户及其关联的联系人指定占位符。

占位符内容
:current_contact→id定义一个OQL“查询菜单”或者“dashlet”,返回用户依赖数据

:current_contact→attribute联系人类的属性

:current_user→attribute用户类的属性


例如,标准“帮助台”菜单“分配给我的请求(作为代理)”
SELECT UserRequest WHERE agent_id = :current_contact->id AND `status` NOT IN ('closed', 'resolved')


函数
verb(expression[,expression [,expression...]...] ...])


[*]verb 是下面功能列表中的一个函数
在SQL中,所有函数实际上都映射到SQL对应的函数。换句话说,最终执行的SQL查询将使用相同的函数。因此,这些函数的规范(参数的个数和类型、返回值)类似于底层数据库服务器的规范。任何限制或副作用都与数据库引擎的版本有关。
下面提供的超链接将指向mySQL 5.0的参考文档,是推荐的标准数据库引擎(用于OQL处理)文档。

[*]函数名称区分大小写。在当前OQL实现中,必须大写,虽然MySQL不限制。
[*]到目前为止,同义词还没有实现(对于给定的函数只有一个名称;例如:OQL实现了DAY,而mySQL实现DAY,并且把DAYOFMONTH作为函数的别名)

函数名称描述示例
IFIf/else 结构IF(a=b, 'equals', 'differs')
ELT返回索引的字符串ELT(index, 'string1', 'string2', 'string3')
COALESCE返回第一个非空参数
COALESCE(field1, field2, 'Undefined')
ISNULL ISNULL(field1)
CONCAT返回连接后的字符串
CONCAT(firstname, ' ', lastname)
SUBSTR返回指定的子字符串SUBSTR('abcdef', 2, 3)
TRIM删除开头和结尾的空格TRIM(' blah ')
DATE提取日期或日期时间表达式的日期部分
DATE()
DATE_FORMAT指定格式日期
DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y')
CURRENT_DATE返回当前日期CURRENT_DATE()
NOW返回当前日期和时间NOW()
TIME提取表达式的时间部分
TIME()
TO_DAYS返回日期参数转换后的天数
TO_DAYS('2009-05-01')
FROM_DAYS转换一个日期数为日期
FROM_DAYS(12345)
YEAR返回日期的年
YEAR(DATE())
MONTH返回日期的月
MONTH(DATE())
DAY返回日期的日 (0-31)
DAY(DATE())
DATE_ADD添加时间值(间隔)到日期。参见下面允许的间隔单位
DATE_ADD(NOW(), INTERVAL 1 HOUR)
DATE_SUB缩短时间值(间隔)到日期。参见下面允许的间隔单位
DATE_SUB(NOW(), INTERVAL 5 MINUTE)
ROUND返回参数X的四舍五入的数值。ROUND(12.356, 2)
FLOOR返回不大于参数的最大整数值
FLOOR(12.356)
INET_ATON返回IP地址的数值
INET_ATON('15.15.121.12')
INET_NTOA返回数值的IP地址
INET_NTOA(1231654)

DATE_ADD和DATE_SUB函数当前支持的时间间隔单位列表,MySQL中允许的值的子集。
OQL接受:

时间间隔单位
YEAR
MONTH
DAY
HOUR
MINUTE
SECOND



页: [1]
查看完整版本: 系统管理-管理员手册-OQL查询语言-OQL基本语法