截取字符串前后位
select substr('12345678',2,length('12345678')-2) from SYSIBM.SYSDUMMY1
空字段处理
coalesce(col_name,'') --如果字段con_name为null时返回空字符串("")
相当于Oracle的:
nvl(expr1,expr2) --如果expr1为null,则nvl返回expe2
nvl2(expr1,expr2,expr3) --如果expr1不为null,则nvl返回expe2;如果expr1为null,则nvl返回expe3
CAST是DB2或oracle中强制类型转换函数,使用方法如下:
--CAST(expression AS data_type)
--例如:
--CAST (id AS varchar(10))在使用中需要注意的是,如果id长度大于10 ,会报错;
--cast(id as int) 若ID之前为字符形式,且字符串中包括空格,则也会报错,DB中报-420错误;
--若expression 为null或'',转换时会报错;
--例如将'2013-10-14'这个字符串转换成20131014应该怎么写
SELECT cast(date('2013-10-14') as int) FROM SYSIBM.dual
DECIMAL数据类型计算
SELECT CAST(ROUND((COUNTNUM*0.6/0.8),6) AS decimal(11,6)) FROM POINTS_RULE
计算4/26的百分率:保留两位小数
SELECT CAST(CAST(4*100 AS decimal)/26 AS decimal(18,2)) from SYSIBM.SYSDUMMY1
TRIM()函数
RTRIM()(去掉字符串右边的空格)、LTRIM()(去掉字符串左边的空格)以及TRIM()(去掉字符串左右两边的空格)
拼接字符串:
--RIGHT('*******' || RTRIM(char('#####')),n)
--一般要写n个"*",如果"#"的位数不足时,左边用"*"补够n位;如果"#"的位数是0时,全用"*"补全,
--如果不写n个"*",当"#"的位数为0时会报错,所以一般写n个"*"。
SELECT 'KHC' || RIGHT('**********' || RTRIM(char('22++')),10) FROM sysibm.dual; --RIGHT('000000000' || RTRIM(CHAR(id)),9)
Merge into 详细介绍 :
--MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。
--通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,
--连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。
--这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。
MERGE INTO TABLE01 T1
USING (SELECT '1001' AS a, 2 AS b FROM TABLE02) T2
ON ( T1.a=T2.a)
WHEN MATCHED THEN
UPDATE SET T1.b= T2.b
WHEN NOT MATCHED THEN
INSERT (a,b) VALUES(T2.a,T2.b);
对数据按adress分组,并给每组添加唯一标志
merge into customermsg_qh a
using(
select * from (
select row_number() over(partition by adress) rownum,idnum,adress from customermsg_qh
) b where b.rownum = 1
) as c on a.adress = c.adress
when matched then
update set a.flag = c.idnum