التحويل إلى التاريخ مع أقنعة متعددة ممكنة في أوراكل
سؤال
يحدث أن أحصل على تاريخ من عمود Varchar2 في Oracle ، لكنه غير متسق في التنسيق. قد يكون لبعض الحقول "2009.12.31" ، والبعض الآخر "2009/12/32 00:00:00". هل هناك أي بناء قياسي يمكنني استخدامه ، حتى لا أضطر إلى المرور
begin
to_date(date, mask1)
exception
begin
to_date(date,mask2)
exception
..
end
end
الكتل أو تحليل سلسلة التاريخ السابق لتحديد القناع الصحيح؟ شيء مثل to_date(date, mask1,mask2,..)
?
المحلول
لا ، لكن بعض تنسيقات تاريخ أوراكل "تسامح" الاختلافات على سبيل المثال
SQL> select to_date('2009.12.31','YYYY/MM/DD') from dual;
TO_DATE('20
-----------
31-DEC-2009
بحيث قد يقلل من كمية الحالات التي تحتاج إلى التعامل معها. أقترح عليك كتابة وظيفة على طول الخطوط التي كنت تفكر فيها ، بحيث يمكن استدعاؤها من جميع الأماكن في الكود الخاص بك حيث تحتاج إلى التعامل مع التواريخ مثل هذا.
نصائح أخرى
تحتاج إلى تعداد جميع التنسيقات الممكنة التي تريد دعمها-تذكر أن بعضها غامض (على سبيل المثال هو "10-11-2009" 10 نوفمبر أو 11 أكتوبر؟) لذلك سيتعين على رمزك أن يفضل أحدهما على الآخر.
كما قال توني ، ستقبل بعض التنسيقات مجموعة متنوعة من المدخلات ، وخاصة فيما يتعلق بتحليل شخصيات الفاصل والبتات المفقودة (على سبيل المثال "dd-mon-yyyy hh24: mi: ss 'سوف يتطابق مع '31 -dec-2009 10:30 : 00 '، '31/dec/2009 10:30' ، '31 Dec 2009 ').
بصرف النظر عن هذه التبسيطات ، ستحتاج إلى سلسلة من stist (format1) استثناء عندما يبدأ الآخرون (تنسيق 2) استثناء عندما يبدأ الآخرون ....