我有一个名为X的字段(Oracle中的列),其值为"a1b2c3","abc","1ab","123","156"
我如何编写一个sql查询,只返回保存纯数值=没有字母的X?从上面的例子可以是"123"和"156"
从myTable中选择X哪里......?
我试图在一个非常大的Oracle表中找到一些有问题的记录.该列应包含所有数字数据,即使它是varchar2列.我需要找到不包含数字数据的记录(当我尝试在此列上调用它时,to_number(col_name)函数会引发错误).
我有以下代码,如果我的值无效,则返回错误消息.如果给定的值不是数字,我想给出相同的错误消息.
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) 在Oracle 10g的SQL查询中,我需要确定字符串是否为数字.我怎样才能做到这一点?
我正在尝试解析以字符串形式输入的年份(请不要让我开始 - 它就是这样)。但是,输入的年份无法由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 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) 在列中,有以"0"开头的数字和字母数字值.如果它是数字,如何修剪前导零,如果它是Oracle中的字母数字,则不应修剪零.
我需要在WHERE Condition中使用它.
防爆.
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)