DB2中REVERSE函数的实现方法
oracle:
sql> select reverse('1234') from dual;
reverse(
--------
4321
sql> select reverse(12121) from dual;
select reverse(12121) from dual
*
第 1 行出现错误:
ora-00932: 数据类型不一致: 应为 char, 但却获得 number
说明oracle中reverse的参数是char类型,返回值也是char,到底是不是这样,我们来验证一下
sql> select length(reverse('1234 ')) from dual;
length(reverse('1234'))
-----------------------
8
sql> select reverse('1234 ') from dual;
reverse('1234')
----------------
4321
如果返回类型是varchar,长度应该是4,所以返回值是char。参数类型也应该是是char。
sql server:
reverse函数的参数类型varchar或nvarchar,返回类型也是varchar或nvarchar
c:\>sqlcmd -s kermart -u sa -p sa -d master
1> select reverse('1234');
2> go
----
4321
(1 行受影响)
1> select reverse(1234); --发生类型转换,应该可以从执行计划中看出来
2> go
------------
4321
(1 行受影响)
基于oracle,sql server都内置了reverse函数,db2也应该有它的reverse函数,因为有一定的应用场景。
create or replace function reverse ( p1 varchar(200) ) returns varchar(200) specific "reverse" language sql deterministic no external action reads sql data begin declare v_str varchar(100) default ''; declare v_index integer; --定义下标 set v_index = length(p1); while(v_index >= 1) do set v_str = v_str||substr(p1,v_index,1); set v_index = v_index - 1; end while; return v_str; end@
测试一下
select reverse('123456') from dual;
654321
select reverse(1234) from dual; --看执行计划,应该可以看到类型转换
4321
上一篇: 在Qt Creator中创建C++工程并使用CMake构建项目
下一篇: DB2死锁的解决过程全记录