×

扫描二维码登录本站

QQ登录

只需一步,快速开始

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

OQL基本语法

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

SELECT   

1.png

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

output_specification
class_alias [, output_specification]

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

class_reference
class_name [AS class_alias]

  • class_name 指的是需要查询的类名。
  • class_alias 指的是引用类的别名,可以在WHERE字句中使用。

class_name or class_alias
name | `name`

下列情况中必须使用倒引号:

  • 类的名字和保留字冲突 (比如: JOIN…),
  • 类的名字包含不希望出现的字符。

class_joined
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中新增:位操作符右移。
[ ttp://dev.mysql.com/doc/refman/5.0/en/regexp.html]REGEXP[/url]正则表达式
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作为函数的别名)

函数名称
描述
示例
[ ttp://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if]IF[/url]If/else 结构IF(a=b, 'equals', 'differs')
[ ttp://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_elt]ELT[/url]返回索引的字符串ELT(index, 'string1', 'string2', 'string3')
[ ttp://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_coalesce]COALESCE[/url]
返回第一个非空参数

COALESCE(field1, field2, 'Undefined')
[ ttp://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_is-null]ISNULL[/url] ISNULL(field1)
[ ttp://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat]CONCAT[/url]
返回连接后的字符串

CONCAT(firstname, ' ', lastname)
[ ttp://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substr]SUBSTR[/url]返回指定的子字符串SUBSTR('abcdef', 2, 3)
[ ttp://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim]TRIM[/url]删除开头和结尾的空格TRIM(' blah ')
[ ttp://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date]DATE[/url]
提取日期或日期时间表达式的日期部分

DATE()
[ ttp://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-format]DATE_FORMAT[/url]
指定格式日期

DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y')
[ ttp://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_current-date]CURRENT_DATE[/url]返回当前日期CURRENT_DATE()
[ ttp://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_now]NOW[/url]返回当前日期和时间NOW()
[ ttp://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_time]TIME[/url]
提取表达式的时间部分

TIME()
[ ttp://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_to-days]TO_DAYS[/url]
返回日期参数转换后的天数

TO_DAYS('2009-05-01')
[ ttp://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_from-days]FROM_DAYS[/url]
转换一个日期数为日期

FROM_DAYS(12345)
[ ttp://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_year]YEAR[/url]
返回日期的年

YEAR(DATE())
[ ttp://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_month]MONTH[/url]
返回日期的月

MONTH(DATE())
[ ttp://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_day]DAY[/url]
返回日期的日 (0-31)

DAY(DATE())
[ ttp://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-add]DATE_ADD[/url]
添加时间值(间隔)到日期。参见下面允许的间隔单位

DATE_ADD(NOW(), INTERVAL 1 HOUR)
[ ttp://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-sub]DATE_SUB[/url]
缩短时间值(间隔)到日期。参见下面允许的间隔单位

DATE_SUB(NOW(), INTERVAL 5 MINUTE)
[ ttp://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_%20round]ROUND[/url]返回参数X的四舍五入的数值。ROUND(12.356, 2)
[ ttp://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_floor]FLOOR[/url]
返回不大于参数的最大整数值

FLOOR(12.356)
[ ttp://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-aton]INET_ATON[/url]
返回IP地址的数值

INET_ATON('15.15.121.12')
[ ttp://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-ntoa]INET_NTOA[/url]
返回数值的IP地址

INET_NTOA(1231654)

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

OQL接受:

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







上一篇:系统管理-管理员手册-OQL查询语言
下一篇:系统管理-管理员手册-OQL查询语言-OQL详细语法
太帅

写了 291 篇文章,拥有财富 553,被 4 人关注

您需要登录后才可以回帖 登录 | 立即注册
B Color Link Quote Code Smilies

成为第一个吐槽的人

手机版|小黑屋|最新100贴|论坛版块|ITIL先锋论坛 |粤ICP备11099876号|网站地图
Powered by Discuz! X3.4 Licensed  © 2001-2017 Comsenz Inc.
返回顶部