डेटा मॉडल समस्या की तरह लगता है (एक स्ट्रिंग में दिनांक संग्रहीत करना)।
लेकिन, चूंकि ऐसा होता है और हम कभी-कभी चीजों को नियंत्रित या बदल नहीं सकते हैं, मैं आमतौर पर इस तरह के एक फ़ंक्शन को रखता हूं:
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;
फिर इसे इस तरह इस्तेमाल करें:
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;