Oracle 判断某個字段的值是不是数字

时间:2025-03-09 15:17:33

<code class="hljs powershell">--<span class="hljs-number">1、利用 to_number

CREATE OR REPLACE <span class="hljs-keyword">FUNCTION isnumeric(str <span class="hljs-keyword">IN VARCHAR2)

    <span class="hljs-keyword">RETURN NUMBER

IS

    v_str FLOAT;

<span class="hljs-keyword">BEGIN

    <span class="hljs-keyword">IF str IS NULL

    THEN

       <span class="hljs-keyword">RETURN <span class="hljs-number">0;

    <span class="hljs-keyword">ELSE

       <span class="hljs-keyword">BEGIN

          SELECT TO_NUMBER (str)

            INTO v_str

            FROM DUAL;

       EXCEPTION

          WHEN INVALID_NUMBER

          THEN

             <span class="hljs-keyword">RETURN <span class="hljs-number">0;

       <span class="hljs-keyword">END;

       <span class="hljs-keyword">RETURN <span class="hljs-number">1;

    <span class="hljs-keyword">END <span class="hljs-keyword">IF;

<span class="hljs-keyword">END isnumeric;

/

 

--<span class="hljs-number">2、利用 regexp_like

CREATE OR REPLACE <span class="hljs-keyword">FUNCTION isnumeric (str <span class="hljs-keyword">IN VARCHAR2)

    <span class="hljs-keyword">RETURN NUMBER

IS

<span class="hljs-keyword">BEGIN

    <span class="hljs-keyword">IF str IS NULL

    THEN

       <span class="hljs-keyword">RETURN <span class="hljs-number">0;

    <span class="hljs-keyword">ELSE

       <span class="hljs-keyword">IF regexp_like (str, <span class="hljs-string">'^(-{0,1}+{0,1})[0-9]+(.{0,1}[0-9]+)$')

       THEN

          <span class="hljs-keyword">RETURN <span class="hljs-number">1;

       <span class="hljs-keyword">ELSE

          <span class="hljs-keyword">RETURN <span class="hljs-number">0;

       <span class="hljs-keyword">END <span class="hljs-keyword">IF;

    <span class="hljs-keyword">END <span class="hljs-keyword">IF;

<span class="hljs-keyword">END isnumeric;

/

 

--<span class="hljs-number">3、利用 translate

CREATE OR REPLACE <span class="hljs-keyword">FUNCTION isnumeric (str <span class="hljs-keyword">IN VARCHAR2)

    <span class="hljs-keyword">RETURN NUMBER

IS

    v_str VARCHAR2 (<span class="hljs-number">1000);

<span class="hljs-keyword">BEGIN

    <span class="hljs-keyword">IF str IS NULL

    THEN

       <span class="hljs-keyword">RETURN <span class="hljs-number">0;

    <span class="hljs-keyword">ELSE

       v_str := translate(str, <span class="hljs-string">'.0123456789', <span class="hljs-string">'.');

 

       <span class="hljs-keyword">IF v_str = <span class="hljs-string">'.' OR v_str = <span class="hljs-string">'+.' OR v_str = <span class="hljs-string">'-.' OR v_str IS NULL

       THEN

          <span class="hljs-keyword">RETURN <span class="hljs-number">1;

       <span class="hljs-keyword">ELSE

          <span class="hljs-keyword">RETURN <span class="hljs-number">0;

       <span class="hljs-keyword">END <span class="hljs-keyword">IF;

    <span class="hljs-keyword">END <span class="hljs-keyword">IF;

<span class="hljs-keyword">END isnumeric;

/</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>