简单列举出一些日常开发中不太常见的sql函数:
1、对查询结果为null的数据赋值:
NVL有两个参数,只有第一个参数为null才会赋值第二个参数
NVL('字段值','默认值')
2、对某值进行截取操作:
和java代码中的substring很相像,第二个参数为截取起始下标,第三个参数为截取终止下标
SUBSTR('待截取值 一般为某字段',0,8)
3、对查询结果值保留小数位 四舍五入:
对数字进行四舍五入到整数位
-- 输出结果:1235
SELECT ROUND(1234.5678) AS ROUNDED_NUMBER FROM DUAL;
对数字进行四舍五入到指定小数位
ROUND('需要进行四舍五入的数字', decimal_places)
-- decimal_places为正数表示保留指定位数的小数
-- decimal_places为负数表示保留指定位数的整数
-- 输出:3.14
SELECT ROUND(3.14159,2) FROM DUAL;
4、将查询出的两个结果集进行拼接成一个结果集:
-- 查询的结果集:id为1和2的两条数据
SELECT * FROM '表名' where id = 1
UNION ALL
SELECT * FROM '表名' where id = 2;
5、sql版本的 if else (个人比较愿意这么称呼):
-- 对查询结果字段为1的值做出修改
CASE WHEN '字段名' = '1' THEN '修改后的值' END
-- 大概就是这个样子
-- 函数编写开始关键字
CASE
-- if
WHEN ... THEN ...
-- else if
WHEN ... THEN ...
-- else
ELSE ...
-- 函数编写结束关键字
END
以上是对下列sql中使用到的函数做出的一些简单讲解,下面正式看下
-- 统计某时段下交易成功率的百分:
-- 一、要求:统计2024年一月份所有交易的成功率
-- 二、表名:OPEN_ACCT_LOG
-- 三、相关字段说明:
-- 1、TRANS_CODE 交易码 (不同交易对应不同的交易码)
-- 2、TRANS_RESULT 交易结果 (1-成功; 2-失败)
-- 3、UPDATE_TIME 更新时间为14位, 需要截取到8位
-- 【语句中(|| '%')仅仅是做字符串拼接 显示美观】
SELECT
TRANS_CODE AS "交易码",
ROUND(COUNT(CASE WHEN TRANS_RESULT = '1' THEN 1 END)
/ (CASE WHEN COUNT(*) = 0 THEN 1 ELSE COUNT(*) END) * 100,2) || '%' AS "交易成功率"
FROM
OPEN_ACCT_LOG
WHERE
TRANS_CODE IN(SELECT TRANS_CODE FROM OPEN_ACCT_LOG
WHERE SUBSTR(UPDATE_TIME,0,8) >= '20240101' AND SUBSTR(UPDATE_TIME,0,8) <= '20240201')
AND SUBSTR(UPDATE_TIME,0,8) >= '20240101'
AND SUBSTR(UPDATE_TIME,0,8) <= '20240201'
GROUP BY TRANS_CODE;