sql >> Database teknologi >  >> RDS >> Oracle

Hvordan finder man en specifik maske i en streng - Oracle?

Lyder som et datamodelproblem (lagring af en dato i en streng).

Men da det sker, og vi nogle gange ikke kan kontrollere eller ændre ting, beholder jeg normalt en funktion som denne:

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;

Så brug det sådan her:

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. MySQL bruger forskelligt indeks afhængigt af grænseværdi med ORDER BY forespørgsel

  2. Bruges til loop efter With-klausulen i PL/SQL

  3. Find ud af ledig plads på tablespace

  4. SQL Server bcp Utility og den numeriske datatype