التحويل إلى التاريخ مع أقنعة متعددة ممكنة في أوراكل

StackOverflow https://stackoverflow.com/questions/1928317

  •  20-09-2019
  •  | 
  •  

سؤال

يحدث أن أحصل على تاريخ من عمود 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) استثناء عندما يبدأ الآخرون ....

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top