sql >> Databasteknik >  >> RDS >> Oracle

Hur minskar man kodduplicering orsakad av delsträng och insträng?

Jag föreslår att du använder REGEXP_SUBSTR vilket är en utmärkt funktion för att uppnå dina förväntade resultat:

SELECT
    l.DBKEY,
    l.DBTIME,
    REGEXP_SUBSTR(l.DBUSER, '[^$]+$')                 AS USERID,
    REGEXP_SUBSTR(l.DESCRIPTION, '[0-9]{4}')          AS ERROR_NUM,
    REPLACE(REGEXP_SUBSTR(l.DESCRIPTION, 'Planogram:[^\]+\\n'), '\n', '')
                                                      AS DESCRIPTION,
    REGEXP_SUBSTR(l.DESCRIPTION, '\d+$')              AS SEVERITY
FROM
    EVENT_LOG l;

Jag har skapat och testat en SQLFiddle . För mer information om REGEXP_SUBSTR du kanske vill läsa Oracle Docs .



  1. Hur lägger man till inledande nolla i ett nummer i Oracle SQL-fråga?

  2. Materialiserad vy snabbuppdatering med HAVING-klausul?

  3. Rekursion i Oracle

  4. SQL-värde för tidigare (okänt) datum