sql >> Databasteknik >  >> RDS >> Oracle

Hur hittar man en specifik mask i en sträng - Oracle?

Låter som ett datamodellproblem (att lagra ett datum i en sträng).

Men eftersom det händer och vi ibland inte kan kontrollera eller ändra saker, brukar jag ha en funktion som den här:

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;

Använd det sedan så här:

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. PHP/MySQL Kritisk sektion

  2. Är det möjligt att lagra bilder, ljud, videor i SQL Database?

  3. Hur extraherar man rader från en json-array med mysql udf json_extract 0.4.0?

  4. Hur man implementerar flerdimensionella sekvenser