sql >> Databáze >  >> RDS >> Oracle

Jak najít konkrétní masku v řetězci - Oracle?

Zní to jako problém s datovým modelem (ukládání data do řetězce).

Ale protože se to stává a my někdy nemůžeme věci kontrolovat nebo měnit, obvykle si nechávám kolem sebe funkci, jako je tato:

CREATE OR REPLACE FUNCTION safe_to_date (p_string        IN VARCHAR2,
                                         p_format_mask   IN VARCHAR2,
                                         p_error_date    IN DATE DEFAULT NULL)
  RETURN DATE
  DETERMINISTIC IS
  x_date   DATE;
BEGIN
  BEGIN
    x_date   := TO_DATE (p_string, p_format_mask);
    RETURN x_date;                                                        -- Only gets here if conversion was successful
  EXCEPTION
    WHEN OTHERS THEN
      RETURN p_error_date;
  END;
END safe_to_date;

Pak jej použijte takto:

WITH d AS
       (SELECT 'X' string_field FROM DUAL
        UNION ALL
        SELECT '11/15/2012' FROM DUAL
        UNION ALL
        SELECT '155' FROM DUAL)
SELECT safe_to_date (d.string_field, 'MM/DD/YYYY')
FROM   d;


  1. Dynamický pivot SQL pro cíle

  2. Porovnání dat Oracle bylo přerušeno kvůli letnímu času

  3. Vybrat duplikáty z jednoho řádku?

  4. Vložte dotaz do funkce SQL