在DM_SQL中支持数值、字符、日期、转换等种类的函数来满足用户不同的需求。
通过查询V$ifun和V$ifun_arg可以得到数据库提供的所有的函数以及其对应的参数要求。
select a.NAME as "函数名称",b.NAME as "参数名称",DATA_TYPE as "参数类型" from v$ifun as a JOIN v$ifun_arg as b on a.id=b.id;
同样可以在DM管理工具上方菜单栏中依次选择“窗口->视图->函数”来直观地查看DM_SQL函数的作用描述。
接下来从各个种类出发对常用的函数进行介绍。
一、字符函数
LOWER(char)
将字符串转换为小写字符串
UPPER(char)
将字符串转换为大写字符串
INITCAP(char)
将字符串中单词的首字符转为大写
CONCAT(char1,char2,char3,...)
将多个字符串连接为一个
SUBSTR(char,m,n)
返回字符串从第m个位置开始长度为n的字串(第一个字符的位置为1而不是0)
LEN(char)与LENGTH(char)
两者都返回字符串中字符的个数,区别在于LEN不记录末尾空格,而LENGTH记录
INSTR(char1,char2)
返回char1中char2第一次出现的位置(若没有出现过返回0)
LPAD(char1,n,char2)
在char1左边填充char2至总长度为n
RPAD(char1,n,char2)
在char1右边填充char2至总长度为n
TRIM(char1 FROM char2)
从char2中删除char1
二、数值函数
ROUND()
将值四舍五入至指定小数位
TRUNC()
将值阶段至指定小数位
MOD()
返回除法运算的余数
三、日期函数
MONTHS_BETWEEN()
返回两个日期之间的月数
ADD_MONTHS()
将日期加上指定月数后返回结果日期
NEXT_DAY()
返回指定日期下一个周几的日期(1为周日,2为周一,以此类推)
LAST_DAY()
返回月份的最后一天
四、转换函数
隐式转换
达梦数据库在进行复制操作时会自动将合适的字符转换为日期或数值类型,以及将日期或数值类型转换为字符。
显示转换
TO_NUMBER()
字符串转换为数值类型
TO_DATE()
字符串转换为日期类型
TO_CHAR()
日期类型以特定的格式转换为字符类型
数值类型以特定格式转换为字符类型
五、分组函数
分组函数作用于一组数据,返回一个值,常在查询语句中与group by一同使用。下面以达梦数据库实例在创建时生成的示例库DMHR下的EMPLOYEE表为例进行演示。
AVG()、MAX()、MIN()、SUM()
三者分别返回一组数据的平均值、最大值、最小值以及求和
COUNT()
返回样本个数
CUBE()
对分组列以及分区列的所有子集进行分组,输出所有分组结果。
先来看没有使用CUBE()函数,对不同部门下各个职位总计薪酬的查询结果:
在使用了CUBE()函数后,查询结果变成了这样:
很容易可以看出使用CUBE()函数的语句结果多了几条,而多出的几条结果则统计了:
- 不同部门相同职位的薪酬之和
- 相同部门不同职位的薪酬之和
- 所有部门和所有职位薪酬之和
例如第9行结果是102部门下所有职位的薪酬之和,数值为第10行与第11行结果的总计薪酬相加而来。
CUBE()函数便是通过这种方式来提供统计分析的功能。
ROLLUP()
效果与CUBE()函数类似,但ROLLUP()仅对第一个参数进行合计,因此产生结果条数更少。
GROUPING()
与CUBE()或ROLLUP()一起使用,用于表示某列是否为分组列(是为0,否为1),GROUPING()函数只能包含一列