使用 DQL
创建业务视图查询的过程利用 DQL 完成,它是一种域查询语言。
对于大多数部分,DQL 与 ANSI SQL 9.2 完全相同,但也存在一些明显差别。
Note: DQL 仅支持 SELECT 语句。
在本主题中︰
DQL 的优点
使用 DQL 构建查询具有以下优点。
DQL 依照用户的权限级别强制隐藏数据。 | 报告将根据要生成它们的用户的权限级别进行生成。业务视图包含的对用户不可用的信息将不会出现在该用户创建的任何报告中。 |
DQL 查询创建一个数据库抽象,用作业务视图的基础。 | 由于视图的基础是数据库的抽象,而不是数据库自身,因此您不需要根据实体字段的实际名称来识别这些字段。例如,与对象标识相关的所有字段都会显示后缀“ID”,如“缺陷 ID”、“周期 ID”和“发布 ID”。 |
DQL 查询在 Oracle 和 SQL 数据库服务器上的运行效果同样出色 |
SQL 新增选项
DQL 提供以下在 ANSI SQL 中不可用的选项:
-
变量。已添加以下三个变量。
:me 返回与创建报告的用户相关的信息。表示基于相同业务视图创建报告的不同用户将收到不同的结果。
:me 变量与以下类似:
Copy codeSelect *
From defect
Where defect.detected_by = :me:current_project_name 返回从中创建报告的项目的相关信息。 :current_domain_name 返回从中创建报告的域的相关信息。 - 选择前几项。此选项可用于将查询结果限制为定义的项数。
支持的函数
下表列出了 OpenText Application Quality Management 中支持的 DQL 函数。DQL 函数转换为在数据库中使用的相应 SQL 函数。此表列出了 DQL 函数到 MS SQL 和 Oracle 的转换。有关详细信息,请参考 MS SQL 和 Oracle 文档。
聚合
函数 |
用法 |
返回类型 |
描述 |
---|---|---|---|
count | count(表达式) | 整数 | 返回查询中的行数。 |
count_big | count_big(表达式) | integer (bigint) |
返回查询中的行数。count 和 count_big 之间唯一的区别是返回值。在 MS SQL 中,count_big 始终返回 bigint 数据类型值,而 count 始终返回 int 数据类型值。 在 Oracle 中,此函数转换为 count。 |
variance | variance(小数) | 小数 |
返回表达式的偏差。 在 MS SQL 中,该函数转换为 var。在 Oracle 中,该函数编码为 round(variance(<decimal>), 14)。 |
var_pop | var_pop(表达式) | 小数 |
返回丢弃集中的所有 Null 值后一组数值的总偏差。 在 MS SQL 中,此函数转换为 varp。在 Oracle 中,此函数编码为 round(var_pop(<表达式>), 14)。 |
stddev | stddev(小数) | 小数 |
返回一组数字的标准偏差。 在 MS SQL 中,此函数转换为 stdev。在 Oracle 中,此函数编码为 round(stddev(<小数>), 14)。 |
stddev_pop | stddev_pop(表达式) | 小数 |
计算总体标准偏差并返回总偏差的平方根。 在 MS SQL 中,此函数转换为 stdevp。在 Oracle 中,此函数编码为 round(stddev_pop(<表达式>), 14)。 |
avg | avg(表达式) | 小数 |
返回表达式的平均值。 在 Oracle 中,此函数编码为 round(avg(<小数>), 14)。 |
sum | sum(小数) | 小数 | 返回表达式的总和值。 |
min | min(表达式) | 表达式 | 返回表达式的最小值。 |
max | max(表达式) | 表达式 | 返回表达式的最大值。 |
字符串操作
函数 |
用法 |
返回类型 |
描述 |
---|---|---|---|
upper | upper(字符串) | 字符串 | 返回所有字母转换为大写字母的给定字符串。 |
lower | lower(字符串) | 字符串 | 返回所有字母转换为小写字母的给定字符串。 |
rtrim | rtrim(字符串) | 字符串 | 返回右侧尾随空格全部删除的给定字符串。 |
ltrim | ltrim(字符串) | 字符串 | 返回前导空格全部删除的给定字符串。 |
replace | replace(字符串, 要替换的字符串, 用于替换的字符串) | 字符串 | 返回将所有 <要替换的字符串> 替换为 <用于替换的字符串> 的给定字符串。 |
substring | substring(字符串, 整数开始位置, 整数长度) | 字符串 |
返回给定字符串的子字符串。
在 Oracle 中,此函数转换为 substr。 |
length | length(字符串) | 小数 |
返回指定字符串的长度。 在 MS SQL 中,此函数转换为 len。 |
chr | chr(整数) | 字符串 |
将 ASCII 代码转换为字符。 在 MS SQL 中,此函数转换为 char。 |
soundex | soundex(字符串) | 字符串 | 返回字符串的语音表达。 |
ascii | ascii(字符串) | 整数 | 返回字符表达式最左侧字符的 ASCII 代码值。 |
concat | concat(字符串 1, 字符串 2) | 字符串 |
将两个字符串连接在一起。 在 MS SQL 中,此函数转换为 +,且函数编码为 <字符串 1> + <字符串 2>。 |
leftstr | leftstr(字符串, 整数) | 字符串 |
返回字符串左侧指定数量的字符。 在 MS SQL 中,此函数转换为 left。在 Oracle 中,此函数转换为 substr 且编码为 substr(<字符串>, 1, <整数>)。 |
lpad | lpad(字符串 1, 整数, 字符串 2) | 字符串 |
返回 <字符串 1>,其中左侧添加了 <字符串 2> 中长度为 <整数> 的字符序列。此函数可用于设置查询输出的格式。 在 MS SQL 中,此函数将转换为执行以上逻辑的 left padding 表达式。 |
reverse | reverse(字符串) | 字符串 |
返回逆序的字符串值。 在 Oracle 中,此函数将编码为“reverse(to_char(<字符串>))”。 |
rightstr | rightstr(字符串, 整数) | 字符串 |
返回字符串右侧指定数量的字符。 在 MS SQL 中,此函数转换为 right。在 Oracle 中,此函数转换为执行以上逻辑且带有 right part 表达式的 substr。 |
rpad | rpad(字符串 1, 整数, 字符串 2) | 字符串 |
返回“<字符串 1>”,其中右侧添加了“<字符串 2>”中长度为“<整数>”的字符序列 (可以按需复制多次)。此函数可用于设置查询输出的格式。 在 MS SQL 中,此函数将转换为执行以上逻辑且带有 right padding 表达式的 left。 |
stuff | stuff(字符串, 整数, 整数, 字符串) | 字符串 |
将字符串插入其他字符串。将从第一个字符串的开始位置开始删除指定长度的字符,然后将第二个字符串插入第一个字符串的开始位置。 在 Oracle 中,stuff 函数将转换为执行以上逻辑的表达式。 |
in_string | in_string(字符串 1, 字符串 2, 整数开始位置) | 整数 |
返回子字符串“字符串 1”在“字符串 2”中的位置 (如存在)。不存在则返回 0搜索开始于“整数开始位置”,从 1 开始。 在 MS SQL 中,此函数将转换为 charindex。在 Oracle 中,此函数转换为 instr 且编码为 instr(<字符串 2>, <字符串 1>, <整数开始位置>)。 |
replicate | replicate(字符串, 整数) | 字符串 |
根据 <整数> 参数中给定的次数,重复 <字符串> 值。 在 Oracle 中,此函数转换为 rpad 且编码为 rpad(<字符串>, length(<字符串>*<整数>), <字符串>)。 |
数学
函数 |
用法 |
返回类型 |
描述 |
---|---|---|---|
sin | sin(小数) | 小数 |
返回小数参数的正弦值。 在 Oracle 中,此函数编码为 round(sin(<小数>), 14)。 |
asin | asin(小数) | 小数 |
返回小数参数的反正弦值。参数范围必须为 -1 到 1。 在 Oracle 中,此函数编码为 round(asin(<小数>), 14)。 |
cos | cos(小数) | 小数 |
返回小数参数的余弦值。 在 Oracle 中,此函数编码为 round(cos(<小数>), 14)。 |
acos | acos(小数) | 小数 |
返回小数参数的反余弦值。参数范围必须为 -1 到 1。 在 Oracle 中,此函数编码为 round(acos(<小数>), 14)。 |
tan | tan(小数) | 小数 |
返回小数参数的正切值。 在 Oracle 中,此函数编码为 round(tan(<小数>), 14)。 |
atan | atan(小数) | 小数 |
返回小数参数的反正切值。 在 Oracle 中,此函数编码为 round(atan(<小数>), 14)。 |
atan2 | atan2(小数 1, 小数 2) | 小数 |
返回 X 轴正向与原点到点 (y, x) 之间的射线的角度(以弧度为单位),其中 x 和 y 代表小数 1 和小数 2 的值。 在 MS SQL 中,此函数转换为 atn2。在 Oracle 中,此函数编码为 round(atan2(<小数 1>), 14)。 |
tanh | tanh(小数) | 小数 |
返回小数参数的双曲正切值。 在 MS SQL 中,此函数将转换为执行以上逻辑的 tanh 表达式。在 Oracle 中,此函数编码为 round(tanh(<小数>), 14)。 |
sqrt | sqrt(小数) | 小数 |
返回小数参数的平方根。 在 Oracle 中,此函数编码为 round(sqrt(<小数>), 14)。 |
exp | exp(小数) | 小数 |
返回 e 的小数参数次方值,其中 e = 2.71828183。 在 Oracle 中,此函数编码为 round(exp(<小数>), 14)。 |
sign | sign(小数) | 小数 |
返回指示数值符号的值。如果数值 < 0,则 sign 返回 -1。如果数值 = 0,则 sign 返回 0。如果数值 > 0,则 sign 返回 1。 在 MS SQL 中,此函数将转换为执行以上逻辑的 sign 表达式且编码为“CAST(sign(<小数>) AS int)”。 |
floor | floor(小数) | 整数 | 返回小于等于指定的小数参数的最大整数。 |
ln | ln(小数) | 小数 |
返回小数参数的自然对数。 在 MS SQL 中,此函数转换为 log。在 Oracle 中,此函数编码为 round(ln(<小数>), 14)。 |
abs | abs(小数) | 小数 | 返回数值的绝对值。 |
round | round(小数, 整数) | 小数 |
返回舍入到小数点右侧整数位的小数。整数参数也可以为负数,表示舍入到小数点左边的相应位数。 在 MS SQL 中,此函数将编码为“CAST(round(<小数>, <整数>) AS int)”或“CAST(round(<小数>, <整数>) AS float)”,具体取决于“整数”值是否为零。 |
mod | mod(小数 1, 小数 2) | 小数 |
返回小数 1 除以 小数 2 之后的余数。 在 MS SQL 中,此函数转换为 % 且编码为 <小数 1> % <小数 2>。 |
trunc_number | trunc_number(小数, 整数) | 小数 |
返回截断到小数的整数位的该小数。如果忽略了整数,则小数截断到 0 位。 在 MS SQL 中,此函数将转换为执行以上逻辑的 truncation 表达式。在 Oracle 中,此函数转换为 trunc。 |
str | str(小数, 整数 1, 整数 2) | 字符串 |
返回转换为数值数据的字符数据。 在 Oracle 中,此函数将转换为执行以上逻辑的 string construction 表达式。 |
ceil | ceil(小数) | 小数 |
返回大于等于小数参数的最小整数。 在 MS SQL 中,此函数转换为 ceiling。 |
强制转换
函数 |
用法 |
返回类型 |
描述 |
---|---|---|---|
to_number | to_number(字符串) | 小数 |
将字符串转换为数值。 在 MS SQL 中,此函数编码为 CAST(<字符串> AS float)。 |
number_to_char | number_to_char(小数) | 字符串 |
将数值转换为字符串。 在 MS SQL 中,此函数编码为 CAST(<小数> AS varchar(50))。在 Oracle 中,此函数转换为 to_char。 |
char_to_char | char_to_char(字符串) | 字符串 |
将 NCHAR、NVARCHAR2、CLOB 或 NCLOB 数据转换为数据库字符集。 在 MS SQL 中,此函数编码为 CAST(<字符串> AS varchar(50))。在 Oracle 中,此函数转换为 to_char。 |
datetime_to_char | datetime_to_char(表达式) | 字符串 |
将日期或日期时间转换为字符串。 在 MS SQL 中,此函数编码为 convert(varchar, <日期>, 121)。在 Oracle 中,此函数转换为 to_char 且编码为 to_char(<日期>, 'YYYY-MM-DD HH24:MI:SS:FF3')。 |
其他
函数 |
用法 |
返回类型 |
描述 |
---|---|---|---|
nullif | nullif(表达式 1, 表达式 2) | 表达式 | 比较表达式 1 和表达式 2。如果表达式 1 和表达式 2 相等,则此函数返回 NULL。否则,返回表达式 1。 |
coalesce | coalesce() | 表达式 | 返回其参数中的首个非 Null 表达式。已返回值的数据类型是具有最高数据类型优先级的参数的数据类型。 |
isnull | isnull(检查表达式, 替换表达式) | 表达式 |
遇到 Null 值后,使用一个值进行代替。如果检查表达式为 Null,则此函数返回替换表达式。 在 Oracle 中,此函数转换为 nvl。 |
日期
函数 |
用法 |
返回类型 |
描述 |
---|---|---|---|
currentdate | currentdate() | 日期 |
返回当前日期。 在 MS SQL 中,此函数编码为 CAST(CAST(getdate() AS date) AS datetime)。在 Oracle 中,此函数编码为 to_date(to_char(sysdate))。 |
dateadd | dateadd(整数, 日期) | 日期 |
将天数添加到日期参数:
在 MS SQL 中,此函数编码为 dateadd(DAY, <天数>, <日期>)。在 Oracle 中,此函数转换为 + 且编码为 <天数> + <日期>。 |
datediff | datediff(开始日期, 结束日期) | 整数 |
返回指定的开始日期和结束日期之间的日期计数(带符号整数)。 在 MS SQL 中,此函数编码为 datediff(DAY, <日期>, <日期>)。在 Oracle 中,此函数转换为 - 且编码为 trunc(<日期> - <日期>, 0)。 |
get_time | get_time() | 日期时间 |
返回当前日期和时间。 在 MS SQL 中,此函数转换为 getdate 且编码为 convert(datetime, getdate(), 126)。在 Oracle 中,此函数转换为 LOCALTIMESTAMP。 |
trunc_date | trunc_date(日期, 字符串格式) | 日期 |
返回截断为特定计量单位的日期。字符串格式是应用截断的计量单位。支持以下格式:年、y、yy、yyyy、q、季度、mm、月、d、dd、日、hh、分钟 在 MS SQL 中,此函数将转换为 dateadd 且编码为“dateadd(<非引用字符串格式>, datediff(<非引用字符串格式>, 0, <日期>), 0)”。在 Oracle 中,此函数将转换为 trunc 且编码为“trunc(<日期>, <字符串格式>)”。 |
to_date | to_date(字符串) | 日期 |
将字符串转换为日期。 在 MS SQL 中,此函数将编码为“CAST(<字符串> AS datetime)”。在 Oracle 中,此函数将编码为“to_date(<字符串>, 'YYYY-MM-DD')”。 |
timestamp_tz | timestamp_tz() | 字符串 |
返回当前的服务器时区。 在 MS SQL 中,此函数转换为 sysdatetimeoffset。在 Oracle 中,此函数转换为 CURRENT_TIMESTAMP。此函数在 MS SQL Server 2005 中不受支持。 |
from_tz | from_tz(日期, 字符串) | 日期 |
将时间戳值 (日期) 与时区 (字符串) 转换为带有时区值的时间戳。 在 MS SQL 中,此函数转换为执行以上逻辑的 time stamp 和 zone 表达式。此函数在 MS SQL Server 2005 中不受支持。 |
sysdatetimeoffset | sysdatetimeoffset() | 具有时区的日期时间 |
返回系统日期(包括小数秒数)以及数据库驻留的系统的时区。 在 Oracle 中,此函数转换为 SYSTIMESTAMP。此函数在 MS SQL Server 2005 中不受支持。 |
getyear | getyear(日期) | 整数 |
返回代表指定日期所在年份的整数。 在 MS SQL 中,此函数转换为 year。在 Oracle 中,此函数转换为 to_char 且编码为 CAST(to_char(<日期>, 'yyyy') AS number)。 |
getmonth | getmonth(日期) | 整数 |
返回代表指定日期所在月份的整数。 在 MS SQL 中,此函数转换为 month。在 Oracle 中,此函数转换为 to_char 且编码为 CAST(to_char(<日期>, 'mm') AS number)。 |
getday | getday(日期) | 整数 |
返回代表月份中指定日期的整数。 在 MS SQL 中,此函数转换为 day。在 Oracle 中,此函数转换为 to_char 且编码为 CAST(to_char(<日期>, 'dd') AS number)。 |
datepart | datepart(字符串日期部分, 日期) | 整数 |
返回代表指定日期的指定字符串格式日期部分的整数。 在 MS SQL 中,此函数将编码为“datepart(<非引用字符串日期部分>, <日期>)”。在 Oracle 中,此函数将转换为执行以上逻辑的 datepart 表达式。 |
datename | datename(字符串日期部分, 日期) | 字符串 |
返回代表指定日期的指定字符串格式日期部分的字符串。支持以下格式:yyyy、yy、年、q、季度、m、月、d、dd、日、hh、分钟 在 MS SQL 中,此函数将编码为“datename(<非引用字符串日期部分>, <日期>)”。在 Oracle 中,此函数将转换为执行以上逻辑的 datename 表达式。 |
特殊日期
Note: 对于每个函数,请求的日期以相应的日期格式返回。在 MS SQL 中,格式为 yyyy-MM-dd 的请求日期都强制转换为日期时间。在 Oracle 中,to_date(<格式为 dd-MMM-yy 的请求日期>, DD-MON-YY)
函数 |
用法 |
返回类型 |
描述 |
---|---|---|---|
firstDayOfCurrentMonth | firstDayOfCurrentMonth() | 日期 | 返回当前月份第一天的日期。 |
firstDayOfCurrentWeek | firstDayOfCurrentWeek() | 日期 | 返回当前周第一天的日期。 |
firstDayOfCurrentYear | firstDayOfCurrentYear() | 日期 | 返回当前年份第一天的日期。 |
firstDayOfNextMonth | firstDayOfNextMonth() | 日期 | 返回下一月份第一天的日期。 |
firstDayOfNextWeek | firstDayOfNextWeek() | 日期 | 返回下一周第一天的日期。 |
firstDayOfNextYear | firstDayOfNextYear() | 日期 | 返回下一年份第一天的日期。 |
firstDayOfPreviousMonth | firstDayOfPreviousMonth() | 日期 | 返回上一月份第一天的日期。 |
firstDayOfPreviousWeek | firstDayOfPreviousWeek() | 日期 | 返回上一周第一天的日期。 |
firstDayOfPreviousYear | firstDayOfPreviousYear() | 日期 | 返回上一年份第一天的日期。 |
lastDayOfCurrentMonth | lastDayOfCurrentMonth() | 日期 | 返回当前月份最后一天的日期。 |
lastDayOfCurrentWeek | lastDayOfCurrentWeek() | 日期 | 返回当前周最后一天的日期。 |
lastDayOfCurrentYear | lastDayOfCurrentYear() | 日期 | 返回当前年份最后一天的日期。 |
lastDayOfNextMonth | lastDayOfNextMonth() | 日期 | 返回下一月份最后一天的日期。 |
lastDayOfNextWeek | lastDayOfNextWeek() | 日期 | 返回下一周最后一天的日期。 |
lastDayOfNextYear | lastDayOfNextYear() | 日期 | 返回下一年份最后一天的日期。 |
lastDayOfPreviousMonth | lastDayOfPreviousMonth() | 日期 | 返回上一月份最后一天的日期。 |
lastDayOfPreviousWeek | lastDayOfPreviousWeek() | 日期 | 返回上一周最后一天的日期。 |
lastDayOfPreviousYear | lastDayOfPreviousYear() | 日期 | 返回上一年份最后一天的日期。 |
实现条件
函数 |
用法 |
返回类型 |
描述 |
---|---|---|---|
decode | decode(表达式, 搜索, 结果 [, 搜索, 结果]...[, 默认] ) | 表达式 |
返回 IF-THEN-ELSE 语句的功能。将表达式与每个搜索值逐一比较。如果表达式符合搜索,则 Oracle 将返回相应结果。如果未找到匹配项,则 Oracle 返回“默认值”。如果忽略了默认值,则 Oracle 返回 null。 在 MS SQL 中,此函数将转换为执行以上逻辑的 case-when-else 表达式。 |
greatest | greatest() | 表达式 |
返回参数列表中的最大值。 在 MS SQL 中,此函数将转换为执行以上逻辑的 greatest 表达式。 |
least | least() | 表达式 |
返回参数列表中的最小值。 在 MS SQL 中,此函数将转换为执行以上逻辑的 least 表达式。 |