[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数据库环境中,有时我们需要处理包含非数字字符的字段,并将其转换为数字进行计算或统计。根据提供的文件信息,本文将详细介绍如何实现“oracle非数字合计”,即将字段中含有汉字或其他非数字字符的数据自动...
在Oracle数据库中,将字符串转换为数字是一项常见的操作,特别是在处理包含数字的字符串列时,可能需要进行数值计算或按照数值大小进行排序。本篇文章将深入探讨如何在SQL查询中利用Oracle提供的函数来实现这一目标...
Oracle字符集是数据库管理系统Oracle中的一个重要概念,它决定了数据库如何存储和处理文本数据。字符集不仅影响着数据的准确性和一致性,还与全球化应用、数据迁移和数据交换密切相关。本篇将深入探讨Oracle字符集的...
- **解决方法**:需要检查涉及到的字符字段,确保它们只包含数字、正负号、小数点以及科学计数法中的“E”或“e”。 #### 解决方案 下面介绍两种常用的方法来判断一个字符串是否能够转换为数字: ##### 方法一:...
Oracle 数据库字段值自动加 1 Oracle 数据库中,字段值自动加 1 是一个常见的需求,特别是在数据插入时需要自动生成唯一标识符的情况下。下面将详细介绍如何实现 Oracle 数据库字段值自动加 1。 首先,需要创建一...
Oracle EBS(Enterprise Business Suite)报表输出时遇到的一个常见问题是,字符字段前部的“0”在导出到Excel后可能会被自动去掉。这个问题主要涉及到数据格式化和Excel的自动处理机制。以下是对这个主题的详细解释...
在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...
突然想到Oracle有一个编码转换的函数叫Convert,如果一个字符串编码转换前后不一样表示字符串里面含有非ASCII字符,这样得到结果。后写出来测试了一下,确实可行,5500万记录10秒钟扫描结束。以下是测试用例: ...
-- 将字符字段转换为日期 SELECT TO_DATE(char_column, 'YYYY-MM-DD') FROM table_name; ``` `TO_NUMBER`函数则用于将字符转换为数字: ```sql SELECT TO_NUMBER(char_column) FROM table_name; ``` 3. 表达式转换 ...
### Oracle字符串处理函数详解 #### 1. ASCII ASCII函数用于返回给定字符的ASCII码值。例如: ``` SQL> select ascii('A') A, ascii('a') a, ascii('0') zero, ascii(' ') space from dual; AAZERO SPACE ------...
通过`Oracle字符相似度函数.png`这个图片文件,你可能能够更直观地了解这些函数的使用方法和示例,结合实际案例学习将更有助于理解和掌握这些功能。在实践中,不断试验和调整,才能更好地利用这些工具解决实际问题。
本文将详细介绍如何在Oracle中实现CLOB字段到字符串类型的转换,并探讨其中的关键技术和注意事项。 #### 一、CLOB概述 1. **定义**: - `CLOB`是Oracle数据库提供的一种特殊的数据类型,用于存储大文本数据。 - ...
DevExpress DXperience 使用 Linq 及CriteriaOperator 查找 Oracle 字符字段不区分大小写代码
oracel中判断字段是否为数字的函数,查找非法字符解决多表关联报错
在Oracle数据库中,默认情况下,`VARCHAR2`类型字段的最大长度为4000个字符。当需要处理更长的字符串时(例如,超过4000个字符),可以采用多种方法来解决这一问题。本文将详细介绍如何在.NET环境中处理和传递长度...
Oracle数据库在JSON处理方面提供了强大的功能,特别是在处理JSON字符串时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web服务与应用程序之间的数据传输。在Oracle中,处理JSON字符串...
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数据库管理与查询过程中,经常需要对数据进行各种筛选与处理,其中一种常见的需求就是过滤或提取特定字段中的数字字符。这种操作在数据清洗、数据分析以及确保数据准确性方面有着重要的应用价值。本文将围绕...
2. **手动编写带有双引号的SQL脚本:** - 直接在SQL脚本中为表名和字段名添加双引号,例如 `CREATE TABLE "TDepartment" (...)`,这样也可以达到相同的效果。 #### 使用默认全部大写和大小写混写的利弊 - **使用...