oracle 判断中文函数

create or replace function func_chinese
(
  p_str     in varchar2,     -- 输入的字符串
  p_code    in varchar2,     -- dump(字符串)
  p_chinese in pls_integer   -- 1, 提取汉字, 非1, 提取非汉字
) return varchar2
as
  v_code         varchar2(32767) := substr(p_code,instr(p_code,‘:‘)+2);
  v_chinese      varchar2(32767) := ‘‘;
  v_non_chinese  varchar2(32767) := ‘‘;
  v_comma        pls_integer;
  v_code_h       pls_integer;
  v_code_l       pls_integer;
begin
  if p_str is not null then
     for i in 1..length(p_str) loop
         if lengthb(substr(p_str,i,1))=2 then
            v_comma  := instr(v_code,‘,‘);
            v_code_h := to_number(substr(v_code,1,v_comma-1));
            v_code_l := to_number(substr(v_code,v_comma+1,abs(instr(v_code,‘,‘,1,2)-v_comma-1)));
            if (v_code_h>=176 and v_code_h<=247 and v_code_l>=161 and v_code_l<=254) or
               (v_code_h>=129 and v_code_h<=160 and v_code_l>=64  and v_code_l<=254  and nvl(v_code_l,127)!=127) or
               (v_code_h>=170 and v_code_h<=254 and v_code_l>=64  and v_code_l<=160  and nvl(v_code_l,127)!=127) then
               v_chinese := v_chinese||substr(p_str,i,1);
            else
               v_non_chinese := v_non_chinese||substr(p_str,i,1);
            end if;
            v_code := ltrim(v_code,‘1234567890‘);
            v_code := ltrim(v_code,‘,‘);
         else
            v_non_chinese := v_non_chinese||substr(p_str,i,1);      
         end if;
         v_code := ltrim(v_code,‘1234567890‘);
         v_code := ltrim(v_code,‘,‘);
     end loop;
     if p_chinese = 1 then
        return v_chinese;
     else
        return v_non_chinese;
     end if;
  else
     return ‘‘;
  end if;
end;
/

SQL> select * from t;
NAME
----------------------
新年快乐X
狿X

199
春天会来的
-----------------------
实验1: 提取汉字
-----------------------
select name,func_chinese(name,dump(name),1) result from t;
NAME                           RESULT
------------------------------ -----------
新年快乐X                      新年快乐
狿X                            狿
狿                             狿
199
春天会来的                     春天会来的
-----------------------
实验2: 提取非汉字
-----------------------
select name,func_chinese(name,dump(name),0) result from t;
NAME                           RESULT
------------------------------ -------
新年快乐X                      X
狿X                            X

199                            199
春天会来的
-----------------------

oracle 判断中文函数

时间: 2024-11-11 08:20:38

oracle 判断中文函数的相关文章

java python oracle判断字符串是否为数字的函数

java public boolean isNumeric(String str){ Pattern pattern = Pattern.compile("^-?[0-9]+\\.?[0-9]+"); Matcher isNum = pattern.matcher(str); if( !isNum.matches() ){ return false; } return true; } python def isNum(value): try: int(value) + 1 except

Oracle数据库实用函数

实用函数 DECODE 语法如下: DECODE(value, if1, then1, if2,then2,if3,then3, . . . else )  Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果.当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1:如果value等于if2,Decode函数结果是then2:等等.事实上,可以给出多个if/then 配对.如果value结果不等于给出的任何配对时,Decode 结果就返回els

Oracle日期校验函数

使用背景:公司有一个存储过程,insert 总是不成功,之后debug,看到insert语句中有对日期处理的函数,TO_CHAR (TO_DATE (v_slot_date, 'yyyy-mm-dd'),'yyyy-mm')查看跳出进入exception时的v_slot_date值,发现v_slot_date是'2013.12月',才恍然大悟,原来是传入的日期字符串不规范,所以导致inset出现异常.所以就准备些一个函数来判断录入日期的正确性. 1,,如何使用本函数(1), 在SQL语句中使用:

oracle数据库中文汉字排序

oracle数据库中文汉字排序 今天需要按oracle数据库中某个表的某个中文字段进行排序,本来感觉挺简单的一个东西,不就是一个order by嘛,可是写完了发现拍的并不对,一时间感到不可思议,又查询,发现果然有这个问题,经过查资料发现,Oracle对中文的排序是按照ASC码的值进行排序的,后来又经过查阅资料发现了一个他的函数 1.按照拼音排序: select * from your_table_name t order by nlssort(t.ordered_column_name,'NLS

【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇三:批量处理后的txt文件入库处理

篇一:WPF常用知识以及本项目设计总结:http://www.cnblogs.com/baiboy/p/wpf.html 篇二:基于OneNote难点突破和批量识别:http://www.cnblogs.com/baiboy/p/wpf1.html 篇三:批量处理后的txt文件入库处理:http://www.cnblogs.com/baiboy/p/wpf2.html 篇四:关于OneNote入库处理以及审核:http://www.cnblogs.com/baiboy/p/wpf3.html [

Oracle中中文、数字,英文混杂形式的字段进行排序的方法

http://blog.csdn.net/p451933505/article/details/9272257 对Oracle中中文.数字.英文混杂形式的字段进行排序的方法: 例如: order by NLSSORT(字段名,'NLS_SORT = SCHINESE_PINYIN_M'), to_number(translate(字段名, '0123456789' || 字段名, '0123456789')) NLSSORT() 函数: 可以使用NLSSORT()函数可以改变Oralce 对汉字

oracle日期时间函数总结

经常写 sql 的同学应该会接触到一些 oracle 的日期时间函数, 例如: 财务软件或者人力资源软件需要按照每年, 每季度, 每月, 甚至每个星期来进行统计. 今天闲来没事, 特意从网上整理了一些资料, 以备日后查阅. 一.常用日期数据格式 1. 获取年的最后一位, 两位, 三位, 四位 select to_char(sysdate,'Y') from dual;    -- 获取年的最后一位 select to_char(sysdate,'YY') from dual;    -- 获取年

Oracle常用单行函数(原创)

前言: 想把单行函数进行一个比较全面的总结,并分享给有需要的人,有不明之处还请多多指教. SQL函数:Oracle的内置函数,包括了单行函数和多行函数,本文重点讲解单行函数.单行函数又可以分为许多类,本人将常用的分为5大类: 字符函数(7个),数值函数(7个),日期函数(7个),转换函数(3个),通用函数(9个),下面开始分析. 一.字符函数: 1.concat函数:用来拼接2个字符串,Expression:concat(str1,str2); Example: select concat('m

Oracle的overlaps函数转换其他数据库语法

首先,来介绍一下Oracle的overlaps函数的用法: overlaps函数是用来判断两个时间段是否有重叠的 比如说计算 (a,b),(c,d) 就可以写成: select * from dual where (a,b) overlaps (c,d); 其中abcd都是日期格式. 注意:比较的只能是日期.如果是数字,则会报错 ORA-00932: inconsistent datatypes 最近项目在使用db2数据库,遇到overlaps函数需要转换成db2中的语法方言,其实就是转换为通用