如何在Oracle中使用mask

时间:2016-11-30 06:34:05

标签: sql oracle

我有一个查询,我需要找到一个refnum的值,其数量类似于“00627987800001”,所以当我编写查询时,我面临两个问题。

1.我需要包括初始零的全部数字。

2.另一个值得关注的是我需要使用数字作为 - 分隔如0062-7987-800-001

我的查询如下。

SELECT nvl(to_char((SELECT lr.location_refnum_value
                     FROM location_refnum lr,
                          servprov        sr,
                          location        loc,
                          shipment        sh
                    WHERE sh.servprov_gid = sr.servprov_gid
                      AND sr.servprov_gid = loc.location_gid
                      AND loc.location_gid = lr.location_gid
                      AND lr.location_refnum_qual_gid = 'ULA.UL_CPF'
                      AND sh.shipment_gid = :p_shipment_id),
                   '999999999999'),
           '-')
  FROM dual

2 个答案:

答案 0 :(得分:0)

select  regexp_replace (to_char (627987800001,'FM00000000000000'),'(.{4})(.{4})(.{3})(.{3})','\1-\2-\3-\4')

from    dual
;

......并且无论如何,请使用ANSI / ISO JOIN

select  regexp_replace 
        (
            to_char (lr.location_refnum_value,'FM00000000000000')
           ,'(.{4})(.{4})(.{3})(.{3})'
           ,'\1-\2-\3-\4'
        ) 

from            location_refnum         lr

        join    location                loc

        on      loc.location_gid    = 
                lr.location_gid

        join    servprov                sr 

        on      sr.servprov_gid     =
                loc.location_gid

        join    shipment                sh

        on      sh.servprov_gid     = 
                sr.servprov_gid

where   lr.location_refnum_qual_gid = 'ULA.UL_CPF'
    and sh.shipment_gid             = :p_shipment_id
;

答案 1 :(得分:0)

  1. 您可以使用To_number函数将字符串转换为相应的“数字”值,以便在where条件下进一步比较。

  2. 您可以使用instrsubstr函数的组合在所给出的数字之间追加所需的字符“ - ”。

  3. 修改

    1. 或者你也可以在他的回答中使用Dudu建议的正则表达式。