相关疑难解决方法(0)

Oracle:返回仅包含数值的行的SQL查询

我有一个名为X的字段(Oracle中的列),其值为"a1b2c3","abc","1ab","123","156"

我如何编写一个sql查询,只返回保存纯数值=没有字母的X?从上面的例子可以是"123"和"156"

从myTable中选择X哪里......?

sql oracle

38
推荐指数
4
解决办法
15万
查看次数

查找Oracle中不包含数字数据的行

我试图在一个非常大的Oracle表中找到一些有问题的记录.该列应包含所有数字数据,即使它是varchar2列.我需要找到不包含数字数据的记录(当我尝试在此列上调用它时,to_number(col_name)函数会引发错误).

sql oracle varchar numeric varchar2

17
推荐指数
3
解决办法
9万
查看次数

如何判断Oracle中的值是否不是数值?

我有以下代码,如果我的值无效,则返回错误消息.如果给定的值不是数字,我想给出相同的错误消息.

IF(option_id = 0021) THEN 
      IF((value<10000) or (value>7200000) or /* Numeric Check */)THEN
          ip_msg(6214,option_name);  -- Error Message
          return;
      END IF;
END IF;      
Run Code Online (Sandbox Code Playgroud)

在SQL Server中,我只是使用了ISNUMERIC().我想在Oracle中做类似的事情.如,

IF((!ISNUMERIC(value)) or (value<10000) or (value>7200000))
    THEN ...
Run Code Online (Sandbox Code Playgroud)

sql oracle isnumeric

17
推荐指数
5
解决办法
7万
查看次数

如何确定SQL中的字符串是否为数字?

在Oracle 10g的SQL查询中,我需要确定字符串是否为数字.我怎样才能做到这一点?

sql numeric oracle10g

13
推荐指数
2
解决办法
7万
查看次数

Oracle 中的异常处理

我正在尝试解析以字符串形式输入的年份(请不要让我开始 - 它就是这样)。但是,输入的年份无法由TO_NUMBER.

WITH src AS (
        SELECT '2000' AS y FROM DUAL
  UNION SELECT '1991' AS y FROM DUAL
  UNION SELECT '20--' AS y FROM DUAL
  UNION SELECT '09' AS y FROM DUAL
  UNION SELECT '11' AS y FROM DUAL
  UNION SELECT '95' AS y FROM DUAL
)

BEGIN
  SELECT
    s.y,
    TO_NUMBER(s.y) AS p
  FROM src s
EXCEPTION
  WHEN INVALID_NUMBER THEN NULL
END
Run Code Online (Sandbox Code Playgroud)

我从未在 Oracle 中进行过异常处理,如果这是一个基本问题,我深表歉意。

在上面运行我的查询时,我得到ORA-00928: missing SELECT keyword然后它突出显示了BEGIN关键字。通过四处搜索,我看到人们所做的就是使用BEGIN …

sql oracle exception-handling exception parseint

5
推荐指数
1
解决办法
263
查看次数

如何检查列值是否包含oracle中的整数

需要一个必须检查结果列是否具有整数的查询.

oracle integer

4
推荐指数
1
解决办法
1万
查看次数

简单的 PL/SQL 函数来测试字符串是否为数字

我对 SQL Server 中的 T-SQL 有丰富的经验,但最近开始从事一个使用 Oracle 数据库 (11g) 的项目,并且在编写看似基本的代码时遇到了一些问题。

我需要测试一组值是否是数字,并且只有在是数字时才将它们插入表中。PL/SQL 似乎没有 is_number 函数,所以我根据 AskTom 问题编写了自己的函数。

create or replace 
function          IS_NUMBER(str in varchar2) return boolean
IS
  n number;
BEGIN
  select to_number(str) into n from dual;
  return (true);
EXCEPTION WHEN OTHERS THEN
  return (false);
END;
Run Code Online (Sandbox Code Playgroud)

最终,我想在 WHERE 子句中使用这个函数,但现在我只是想让它运行:

declare
  str varchar2(1);
  n boolean;
begin
  str := '0';
  select ca_stage.is_number(str) into n from dual;
end;
Run Code Online (Sandbox Code Playgroud)

在 SQL Developer 中,尝试运行它会给出以下错误报告:

Error report:
ORA-06550: line 6, column 39:
PLS-00382: expression is of wrong type …
Run Code Online (Sandbox Code Playgroud)

plsql oracle11g

3
推荐指数
1
解决办法
7720
查看次数

如果它是数字则修剪前导零,如果是字母数字则修剪前缀为零

在列中,有以"0"开头的数字和字母数字值.如果它是数字,如何修剪前导零,如果它是Oracle中的字母数字,则不应修剪零.

我需要在WHERE Con​​dition中使用它.

防爆.

000012345应该是12345. 012321应该是12321. 00012JY12应该是00012JY12.

这是我试过的:

    SELECT COUNT(*)
    FROM <TABLE 1> ONN, <TABLE 2> SV
   WHERE SV.CSA_SHP_VISIT_STG_SEQ_ID=ONN.CSA_SHOP_VIST_SEQ_ID
    AND EXISTS (SELECT '1' FROM  <TABLE 3> TMP 
    WHERE TRIM(SV.WORK_ORDER_NUM) = TRIM(TMP.WORK_ORDER_NUM)
    AND PLANT IN ('EMA')
    AND regexp_replace(TRIM(ONN.INSTLD_PART), '^0+([[:digit:]]+)$', 
   '\1')=TRIM(TMP.INSTLD_PART)  AND
  TRIM(ONN.INSTLD_PART_SERIAL_NUM)=TRIM(TMP.INSTLD_PART_SERIAL_NUM) AND      
    nvl(to_number(TRIM(ONN.INSTLD_PART_CSN)),0)=
    nvl(to_number(TRIM(TMP.INSTLD_PART_CSN)),0)
    and REGEXP_LIKE(tmp.INSTLD_PART_CSN, '^-?\d+(\.\d+)?$'))
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle11g leading-zero character-trimming

1
推荐指数
1
解决办法
544
查看次数