DM_SQL语言支持的表达式
# DM_SQL 语言支持的表达式
官方文档直达:[1.5 DM_SQL 语言支持的表达式 | 达梦技术文档 (dameng.com)](https://eco.dameng.com/document/dm/zh-cn/pm/dm_sql-introduction.html#1.5 DM_SQL 语言支持的表达式)
# 字符串表达式
连接 ||
语法:STR1 || STR2
(STR1
代表字符串 1,STR2
代表字符串 2)
功能:
- 连接操作符对两个运算数进行运算,其中每一个都是对属于同一字符集的字符串的求值。
- 它以给定的顺序将字符串连接在一起,并返回一个字符串。
- 其长度等于两个运算数长度之和。
- 如果两个运算数中有一个是 NULL,则 NULL 等价为空串。
例如:
select '武汉' || ADDRESS1 from PERSON.ADDRESS WHERE ADDRESSID=3;
查询结果为:武汉青山区青翠苑 1 号
# 时间值表达式
- 时间值表达式的结果为时间值类型,包括
日期(DATE)类型
,时间(TIME)类型
和时间戳(TIMESTAMP)间隔类型
。 - DM SQL 不是对于任何的日期时间和间隔运算数的组合都可以计算。如果任何一个运算数是 NULL,运算结果也是 NULL。
下面列出了有效的可能性和结果的数据类型。
1、日期 + 间隔,日期-间隔和间隔 + 日期,得到日期
日期表达式的计算是根据有效格里高利历日期的规则。如果结果是一个无效的日期,表达式将出错。
参与运算的间隔类型只能是:
INTERVAL YEAR
、INTERVAL MONTH
、INTERVAL YEAR TO MONTH
、INTERVAL DAY
。
如果间隔运算数是 年-月间隔
,则没有从运算数的 DAY 字段的进位。
例如:
select PUBLISHTIME + INTERVAL '1' YEAR, PUBLISHTIME - INTERVAL '1' YEAR
from PRODUCTION.PRODUCT
where PRODUCTID=1;
2
3
查询结果为:2006-04-01 2004-04-01
2、时间 + 间隔,时间-间隔和间隔 + 时间,得到时间
时间表达式的计算是根据有效格里高利历日期的规则。如果结果是一个无效的时间,表达式将出错。
参与运算的间隔类型只能是:
INTERVAL DAY
、INTERVAL HOUR
、INTERVAL MINUTE
、INTERVAL SECOND
、INTERVAL DAY TO HOUR
、INTERVAL DAY TO MINUTE
、INTERVAL DAY TO SECOND
、INTERVAL HOUR TO MINUTE
、INTERVAL HOUR TO SECOND
、INTERVAL MINUTE TO SECOND
。
例如:
对时间值进行 +、- 小时间隔运算。
SELECT TIME '19:00:00' + INTERVAL '9' HOUR, TIME '19:00:00' - INTERVAL '9' HOUR;
查询结果为:04:00:00 10:00:00
3、时间戳记 + 间隔,时间戳记-间隔和间隔 + 时间戳记,得到时间戳记
时间戳记表达式的计算是根据有效格里高利历日期的规则。如果结果是一个无效的时间戳记,表达式将出错。
参与运算的间隔类型只能是:
INTERVAL YEAR
、INTERVAL MONTH
、INTERVAL YEAR TO MONTH
、INTERVAL DAY
、INTERVAL HOUR
、INTERVAL MINUTE
、INTERVAL SECOND
、INTERVAL DAY TO HOUR
、INTERVAL DAY TO MINUTE
、INTERVAL DAY TO SECOND
、INTERVAL HOUR TO MINUTE
、INTERVAL HOUR TO SECOND
、INTERVAL MINUTE TO SECOND
。
与时间的计算不同,当结果的小时值大于等于 24 时,结果进位到天。
例如:
SELECT TIMESTAMP'2007-07-15 19:00:00'+INTERVAL'9'HOUR, TIMESTAMP'2007-07-15 19:00:00'-INTERVAL'9'HOUR;
查询结果为:2007-07-16 04:00:00 2007-07-15 10:00:00
注:在含有 SECOND 值的运算数之间的一个运算的结果具有等于运算数的小数秒精度的小数秒精度。
4、日期 + 数值,日期-数值和数值 + 日期,得到日期
日期与数值的运算
,等价于 日期与一个 INTERVAL '数值' DAY 的时间间隔的运算
。
例 1 未设置 + 或-的数值时返回操作发生的日期
# 假设该查询操作发生在2011年9月29日
SELECT CURDATE();
2
查询结果为:2011-09-29
例 2 返回 当前日期 + 数值后
的结果
SELECT CURDATE() + 2;
查询结果为:2011-10-01
例 3 返回 当前日期 - 数值
的结果
SELECT CURDATE() - 100;
查询结果为:2011-06-21
# 运算符的优先级
当一个复杂的表达式有多个运算符时,运算符优先性决定执行运算的先后次序。
运算符有下面这些优先等级(从高到低排列)。在较低等级的运算符之前先对较高等级的运算符进行求值。
( )
+(一元正)、-(一元负)、~(一元按位非)
*(乘)、/(除)、%(取余数)
+(加)、-(减)
|| (串联)
<<(左移)、>>(右移)
&(按位与)
^(按位异)
|(按位或)
2
3
4
5
6
7
8
9