`

Oracle字符字段含有数字的各种处理

 
阅读更多
[list]
  • 怎么在字符字段中查出只包含数字的数据
  • select * from table where regexp_substr(check,'[0-9]+') is not null
    
    再求和
    
    declare
     
      v_length  number default 0;  ---记录字符串长度
      t_sum    number default 0;  ---记录字符串中数字之和
      t_num    number default 0;  ---记录每次取到数字时的值
      t_is_num number default 0; ---判断取到的值是否数字
      v_str    TMP_XYX26.T2%type;  ---取出的值
     
      ---获取含有数字字符串所有记录
      cursor t_cur is
        select t2 from TMP_XYX26 where regexp_substr(t2, '[0-9]+') is not null;
     
    begin
      open t_cur;
      loop
        fetch t_cur
          into v_str;
        exit when t_cur%notfound;
        t_sum := 0;
        select length(v_str) into v_length from dual;
        for i in 1 .. v_length loop
         
          select ascii(substr(v_str, i, 1)) into t_is_num from dual; ---根据ASCII码判断取出的字符是否为数字,48到57分别 表示0-9
         
          if t_is_num between 48 and 57 then
           
            select substr(v_str, i, 1) into t_num from dual;
            t_sum := t_sum + t_num;
           
          else
            null;
          end if;
         
        end loop;
        ---打印结果
        dbms_output.put_line('字符串' || ' ' || v_str || ' ' || '对应数字之和' || t_sum);
      end loop;
      close t_cur;
    end;
    
  • 查出数字字符字段中非数字字符的记录
  • [list]
  • 方法一:translate函数
  • select translate('23456中国3-00=.,45','0123456789'||'23456中国3-00=.,45','0123456789') from dual;
    
    select trim(translate(RTRIM(LTRIM(ITEM_NUMBER)), '#0123456789', '#'))
      from TestChar
     Where trim(translate(RTRIM(LTRIM(ITEM_NUMBER)), '#0123456789', '#')) is not null;
    
  • 方法二:自定义函数
  • create or replace function f_filter_str(var_str varchar) return varchar
    is
    var_str_new varchar2(2000);
    begin
    for i in 1..length(var_str) loop
    if ascii(substr(var_str,i,1))>=48 and ascii(substr(var_str,i,1))<=57 then
    var_str_new := var_str_new || substr(var_str,i,1);
    end if;
    end loop;
    return var_str_new;
    end f_filter_str;
     
    select f_filter_str('23456中国3-00=.,45') from dual;
    
  • 方法三:正则表达式(oracle10g以上版本)
  • select regexp_replace('23456中国3-00=.,45','[^0-9]') from dual;
    

    下面是一个完整的实现方法(从数据表table的column列中查询出数字字符串并将查询出的数字字符串转换为数字型数据):
    select to_number(column) from table where REGEXP_LIKE(trim(column),'^([0-9]+/.[0-9]+)$|^[0-9]+$')  
    select to_number(column) from table where REGEXP_LIKE(trim(column),'^([0-9]+/.[0-9]+)$|^[0-9]+$') 
    

    至于非数字型字符串的方法也比较简单,因为REGEXP_LIKE返回的是一个Boolean型值,所以只需在REGEXP_LIKE前增加一个“not” 就可以了,下面查询非数字型字符串的一个完整实现(从数据表table的column列中查询出不为数字字符串的数据):
    select to_number(column) from table where not REGEXP_LIKE(trim(column),'^([0-9]+/.[0-9]+)$|^[0-9]+$')  
    
  • 方法四:Java方法
  • import Java.io.*;
    import Java.sql.*;
     
    public class StringUtil
    {
    public static String filterStr2Num(String str){
    String tmpstr = str;
    String savestr;
    String result = "";
    for (int i=0;i<tmpstr.length();i++){
    savestr = tmpstr.substring(i,i+1);
    if (StringUtil.isNumeric(savestr)){
    result+=savestr;
    }
     
    }
    return result;
     
    }
     
    public static String filterStr2Str(String str){
    String tmpstr = str;
    String savestr;
    String result = "";
    for (int i=0;i<tmpstr.length();i++){
    savestr = tmpstr.substring(i,i+1);
    if (!StringUtil.isNumeric(savestr)){
    result+=savestr;
    }
     
    }
    return result;
     
    }
     
     
    public static boolean isNumeric(String str){
    try{
    Integer.valueOf(str);
    return true;
    }catch(Exception e){
    return false;
    }
     
    } 
     
    }
    

    create or replace function Java_filterStr2Num(str In Varchar) return varchar2 as
    LANGUAGE JAVA
    NAME 'StringUtil.filterStr2Num(java.lang.String) return java.lang.String';
     
    create or replace function Java_filterStr2Str(str In Varchar) return varchar2 as
    LANGUAGE JAVA
    NAME 'StringUtil.filterStr2Str(java.lang.String) return java.lang.String';
    
    再然后
    Select java_filterStr2Num('254名字性345345别介绍') From dual; 取数字
    Select java_filterStr2Str('254名字性345345别介绍') From dual; 取文字
    
  • 方法五:正则表达式
  • 下面是一个完整的实现方法(从数据表table的column列中查询出数字字符串并将查询出的数字字符串转换为数字型数据): 
    
    select to_number(column) from table where REGEXP_LIKE(trim(column),'^([0-9]+/.[0-9]+)$|^[0-9]+$')  
    select to_number(column) from table where REGEXP_LIKE(trim(column),'^([0-9]+/.[0-9]+)$|^[0-9]+$') 
    
    至于非数字型字符串的方法也比较简单,因为REGEXP_LIKE返回的是一个Boolean型值,所以只需在REGEXP_LIKE前增加一个“not” 就可以了,下面查询非数字型字符串的一个完整实现(从数据表table的column列中查询出不为数字字符串的数据): 
    
    select to_number(column) from table where not REGEXP_LIKE(trim(column),'^([0-9]+/.[0-9]+)$|^[0-9]+$')  
    

    加了个函数来判断
    create or replace function BhToNumber(strNumber varchar2) return number
    is
    begin
           return (to_number(strNumber));
    exception
           when others then
           return (0);
    end ;
     
    sql中这样来查询 select BhToNumber(字段名) from 表名
    

    [/list]
  • 实际开发中遇到的问题
  • select a.* from ( select * from cc_activity where is_number(activity)='Y') a where 1=1
     
    select a.* from (select * from cc_activity where isnumber(activity)='Y') a where id>2060 and id<2100 and a.activity <100000;
     
    http://z-one.iteye.com/blog/1304826
    

    [/list]
    分享到:
    评论

    相关推荐

      oracle非数字合计,将字段中含有汉子的数据自动转换为 数字0

      在Oracle数据库环境中,有时我们需要处理包含非数字字符的字段,并将其转换为数字进行计算或统计。根据提供的文件信息,本文将详细介绍如何实现“oracle非数字合计”,即将字段中含有汉字或其他非数字字符的数据自动...

      oracle通过sql实现字符串转数字oracle函数

      在Oracle数据库中,将字符串转换为数字是一项常见的操作,特别是在处理包含数字的字符串列时,可能需要进行数值计算或按照数值大小进行排序。本篇文章将深入探讨如何在SQL查询中利用Oracle提供的函数来实现这一目标...

      Oracle 字符集详解

      Oracle字符集是数据库管理系统Oracle中的一个重要概念,它决定了数据库如何存储和处理文本数据。字符集不仅影响着数据的准确性和一致性,还与全球化应用、数据迁移和数据交换密切相关。本篇将深入探讨Oracle字符集的...

      oracle 如何判断一个字符串能否转换为数字?

      - **解决方法**:需要检查涉及到的字符字段,确保它们只包含数字、正负号、小数点以及科学计数法中的“E”或“e”。 #### 解决方案 下面介绍两种常用的方法来判断一个字符串是否能够转换为数字: ##### 方法一:...

      oracle数据库字段值自动加1

      Oracle 数据库字段值自动加 1 Oracle 数据库中,字段值自动加 1 是一个常见的需求,特别是在数据插入时需要自动生成唯一标识符的情况下。下面将详细介绍如何实现 Oracle 数据库字段值自动加 1。 首先,需要创建一...

      Oracle EBS 报表输出字符字段前部"0"被Excel自动去掉问题

      Oracle EBS(Enterprise Business Suite)报表输出时遇到的一个常见问题是,字符字段前部的“0”在导出到Excel后可能会被自动去掉。这个问题主要涉及到数据格式化和Excel的自动处理机制。以下是对这个主题的详细解释...

      Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

      在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...

      Oracle中如何用SQL检测字段是否包括中文字符

      突然想到Oracle有一个编码转换的函数叫Convert,如果一个字符串编码转换前后不一样表示字符串里面含有非ASCII字符,这样得到结果。后写出来测试了一下,确实可行,5500万记录10秒钟扫描结束。以下是测试用例:  ...

      oracle字段类型转换的处理

      -- 将字符字段转换为日期 SELECT TO_DATE(char_column, 'YYYY-MM-DD') FROM table_name; ``` `TO_NUMBER`函数则用于将字符转换为数字: ```sql SELECT TO_NUMBER(char_column) FROM table_name; ``` 3. 表达式转换 ...

      Oracle字符串处理函数

      ### Oracle字符串处理函数详解 #### 1. ASCII ASCII函数用于返回给定字符的ASCII码值。例如: ``` SQL&gt; select ascii('A') A, ascii('a') a, ascii('0') zero, ascii(' ') space from dual; AAZERO SPACE ------...

      Oracle字符相似度函数

      通过`Oracle字符相似度函数.png`这个图片文件,你可能能够更直观地了解这些函数的使用方法和示例,结合实际案例学习将更有助于理解和掌握这些功能。在实践中,不断试验和调整,才能更好地利用这些工具解决实际问题。

      ORACLE中CLOB字段转String类型

      本文将详细介绍如何在Oracle中实现CLOB字段到字符串类型的转换,并探讨其中的关键技术和注意事项。 #### 一、CLOB概述 1. **定义**: - `CLOB`是Oracle数据库提供的一种特殊的数据类型,用于存储大文本数据。 - ...

      DevExpress DXperience 使用 Linq 及CriteriaOperator 查找 Oracle 字符字段不区分大小写代码

      DevExpress DXperience 使用 Linq 及CriteriaOperator 查找 Oracle 字符字段不区分大小写代码

      oracel中判断字段是否为数字的函数

      oracel中判断字段是否为数字的函数,查找非法字符解决多表关联报错

      Oracle接收长度大于4000的字符串

      在Oracle数据库中,默认情况下,`VARCHAR2`类型字段的最大长度为4000个字符。当需要处理更长的字符串时(例如,超过4000个字符),可以采用多种方法来解决这一问题。本文将详细介绍如何在.NET环境中处理和传递长度...

      Oracle JSON 字符串处理实例

      Oracle数据库在JSON处理方面提供了强大的功能,特别是在处理JSON字符串时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web服务与应用程序之间的数据传输。在Oracle中,处理JSON字符串...

      Oracle查找字符串中某字符出现的次数

      select f_find('Ap@2233ll@@l@@','@') from dual 返回结果为5,代表‘@’在该字符串中出现5次。 同理 select f_find('Ap@223SWEQQQ3ll@@l@@','Q') from dual---返回3,代表Q在字符串中出现了3次, select f_find('我...

      oracle某个字段多行记录转化为一行

      根据提供的信息,本文将详细介绍如何在Oracle数据库中将某个字段的多行记录转换为一行记录...通过这种方式,我们可以在Oracle数据库中轻松地将某个字段的多行记录转换为一行记录,极大地提高了数据处理的灵活性和效率。

      oracle过滤数字

      在Oracle数据库管理与查询过程中,经常需要对数据进行各种筛选与处理,其中一种常见的需求就是过滤或提取特定字段中的数字字符。这种操作在数据清洗、数据分析以及确保数据准确性方面有着重要的应用价值。本文将围绕...

      如何:让Oracle表及字段显示为区分大小写

      2. **手动编写带有双引号的SQL脚本:** - 直接在SQL脚本中为表名和字段名添加双引号,例如 `CREATE TABLE "TDepartment" (...)`,这样也可以达到相同的效果。 #### 使用默认全部大写和大小写混写的利弊 - **使用...

    Global site tag (gtag.js) - Google Analytics