أكثر

تحويل حقل DateTime إلى Just Date في تسمية التعبير


لدي حقل التاريخ والوقت (على سبيل المثال: تاريخ الإنشاء) وأود إظهار التاريخ مع التسمية فقط. كيف يمكنني إعداد تعبير التسمية للقيام بذلك باستخدام بيثون؟


من المضحك أن مترجم Python (آلة حاسبة الحقل) يتعامل مع حقول Arcgis datetime كنصوص يونيكود. لاستخراج التاريخ من هذه السلسلة ، يجب تحويلها إلى datetime ثم استخراج التاريخ ثم التحويل إلى سلسلة!

كود مستقل (بافتراض أن لديك تنسيق تاريخ ووقت مثل10/8/2015 3:24:53 صباحًا):

طباعة str (datetime.datetime.strptime (u'10 / 8/2015 3:24:53 صباحًا '، "٪ m /٪ d /٪ Y٪ H:٪ M:٪ S٪ p"). date ())

تعبير التسمية (محلل بيثون):

def FindLabel ([DateModified]): إرجاع str (datetime.datetime.strptime ([DateModified]، "٪ m /٪ d /٪ Y٪ H:٪ M:٪ S٪ p"). date ())

التاريخ الموجود في حقل التاريخ والوقت هو أول 10 أحرف من الحقل.

حاولت ما يلي في مجال يسمى تاريخ_السابق.

في تعبير التسمية ، اضبط المحلل اللغوي على Python.

ضع علامة في المربع خيارات متقدمة واضبط تعبيرك على ما يلي:

def FindLabel ([last_edited_date]): إرجاع [last_edited_date] [: 10]

والتغيير تاريخ_السابق مهما كان اسم مجالك. المفتاح هنا هو استخدام قدرة تقطيع خيوط الثعبان. هذا هو، [:10] للحصول على أول 10 أحرف من الحقل.

تبدو النتائج كما يلي:


تنسيق حقل التاريخ والوقت

تحتوي أنواع بيانات التاريخ والوقت على مجموعة متنوعة من التنسيقات للمساعدة في تلبية ظروفك الفريدة. عند التنسيق ، لديك ثلاثة خيارات: الاحتفاظ بالتنسيقات الافتراضية ، أو تطبيق تنسيق محدد مسبقًا ، أو إنشاء تنسيق مخصص. عند تطبيق تنسيق على حقل جدول ، يتم تطبيق نفس التنسيق تلقائيًا على أي عنصر تحكم نموذج أو تقرير تقوم بربطه لاحقًا بحقل الجدول هذا. يغير التنسيق فقط كيفية عرض البيانات ولا يؤثر على كيفية تخزين البيانات أو كيف يمكن للمستخدمين إدخال البيانات.


5 إجابات 5

يبدو أن هذا يعمل ويحافظ على الدقة أيضًا:

يحول CAST إلى DATETIME2 (7) قيمة TIME (7) (@ T) إلى DATETIME2 حيث يكون جزء التاريخ هو "1900-01-01" ، وهي القيمة الافتراضية لأنواع التاريخ والوقت (انظر datetime2 والتعليق * في صفحة CAST و CONVERT على MSDN.)

*. عند إرسال بيانات الأحرف التي تمثل التاريخ فقط أو مكونات الوقت فقط إلى أنواع بيانات التاريخ والوقت أو التاريخ والوقت ، يتم تعيين مكون الوقت غير المحدد على 00: 00: 00.000 ، و تم تعيين مكون التاريخ غير المحدد على 1900-01-01.

تهتم الدالة DATEADD () و DATEDIFF () بالباقي ، أي إضافة الفرق بالأيام بين 1900-01-01 وقيمة DATE (D).

كما لاحظQuandary ، يعتبر التعبير أعلاه غير محدد بواسطة SQL Server. إذا أردنا تعبيرًا حتميًا ، على سبيل المثال لأنه سيتم استخدامه لعمود PERSISTED ، يجب استبدال "19000101" ** بـ 0 أو CONVERT (DATE، '19000101'، 112):

**: DATEDIFF (day، '19000101'، d) ليست حتمية لأنها تقوم بتحويل ضمني للسلسلة إلى DATETIME وتكون التحويلات من السلاسل إلى التاريخ والوقت حتمية فقط عند استخدام أنماط معينة.


11 إجابات 11

إذا كان نوع العمود هو DateTime في SQL ، فسيخزن وقتًا تمرر فيه واحدًا أم لا.

سيكون من الأفضل حفظ التاريخ بشكل صحيح:

ثم قم بتنسيقه عندما تريد عرضه:

أو إذا كنت تستخدم EditorFor:

لإضافة خاصية إلى النموذج الخاص بك ، أضف هذا الرمز:

أريد فقط أن أوضح لهذه الإجابة أنه من خلال قولي "إذا كنت تستخدم EditorFor" ، فهذا يعني أنك بحاجة إلى أن يكون لديك قالب EditorFor لنوع القيمة التي تحاول تمثيلها.

تعد قوالب المحرر طريقة رائعة لإدارة عناصر التحكم المتكررة في MVC:

يمكنك استخدامها لأنواع ساذجة مثل String كما فعلت أعلاه ولكنها رائعة بشكل خاص للسماح لك بنموذج مجموعة من حقول الإدخال لنوع بيانات أكثر تعقيدًا.

كان عليك فقط التعامل مع هذا السيناريو بنفسي - وجدت طريقة سهلة حقًا للقيام بذلك ، ما عليك سوى كتابة تعليق توضيحي لممتلكاتك في النموذج مثل هذا:

سيخفي زر الوقت من منتقي التاريخ أيضًا.

آسف إذا كانت هذه الإجابة متأخرة قليلاً)

يعمل هذا إذا كنت تريد العرض في TextBox:

التاريخ / الوقت في قاعدة التاريخ لن يكون ملف منسق الإصدار على الإطلاق. سيكون مجرد التاريخ / الوقت نفسه. كيف عرض هذا التاريخ / الوقت عند استخراج القيمة من قاعدة البيانات هو أمر مختلف. أظن بشدة أنك تريد حقًا:

نعم ، إذا نظرت إلى قاعدة البيانات باستخدام SQL Server Studio أو أي شيء آخر ، فسترى الآن منتصف الليل - لكن هذا غير ذي صلة ، وعندما تقوم بإحضار التاريخ من قاعدة البيانات وعرضه على المستخدم ، ومن بعد يمكنك تطبيق التنسيق المناسب.

تحرير: فيما يتعلق بسؤالك المحرر ، المشكلة ليست في النموذج - إنها كيفية تحديد طريقة العرض. يجب عليك استخدام شيء مثل:

حيث d هو محدد تنسيق التاريخ والوقت القياسي لنمط التاريخ القصير (مما يعني أنه سيأخذ الإعدادات الثقافية الحالية في الاعتبار).

هذا هو الشيء الذي كنت أقوله مرارًا وتكرارًا - هذا عندما تكون أنت عرض التاريخ / الوقت للمستخدم، هذا هو الوقت المناسب لتنسيقه كتاريخ بدون وقت.

تحرير: إذا لم ينجح ذلك ، فيجب أن تكون هناك طريقة لتزيين النموذج أو العرض بسلسلة تنسيق - أو شيء من هذا القبيل. أنا لست شخصًا من فئة MVC حقًا ، لكني أشعر وكأنني هناك ينبغي لتكون طريقة جيدة للقيام بذلك بشكل تصريحي.


دالات التاريخ والوقت في معيار SQL

يتم تنسيق جميع المخرجات تلقائيًا وفقًا لمعيار ISO 8601 ، مع فصل التاريخ والوقت بحرف T.

CURRENT_DATETIME

وصف

إرجاع الوقت الحالي ككائن DATETIME. الأقواس اختيارية عند استدعائها بدون وسيطات.

تدعم هذه الوظيفة معلمة المنطقة الزمنية الاختيارية. راجع تعريفات المنطقة الزمنية للحصول على معلومات حول كيفية تحديد منطقة زمنية.

نوع بيانات الإرجاع

عند وجود عمود يسمى current_datetime ، يكون اسم العمود واستدعاء الوظيفة بدون أقواس ملتبسين. لضمان استدعاء الوظيفة ، أضف أقواسًا لضمان اسم العمود ، وقم بتأهيله باستخدام متغير النطاق الخاص به. على سبيل المثال ، سيحدد الاستعلام التالي الوظيفة في العمود الآن وعمود الجدول في العمود current_datetime.

التاريخ

وصف

  1. لإنشاء كائن DATETIME باستخدام قيم INT64 التي تمثل السنة والشهر واليوم والساعة والدقيقة والثانية.
  2. بناء كائن DATETIME باستخدام كائن DATE وكائن TIME اختياري.
  3. بناء كائن DATETIME باستخدام كائن TIMESTAMP. وهو يدعم معلمة اختيارية لتحديد منطقة زمنية. إذا لم يتم تحديد منطقة زمنية ، فسيتم استخدام المنطقة الزمنية الافتراضية ، UTC.

نوع بيانات الإرجاع

مقتطف

وصف

تُرجع قيمة تتوافق مع الجزء المحدد من تعبير datetime_expression.

  • ميكروسكوند
  • ميلي ثانية
  • ثانيا
  • دقيقة
  • ساعة
  • يوم من الأسبوع
  • يوم
  • يوم
  • WEEK: إرجاع رقم الأسبوع للتاريخ في النطاق [0 ، 53]. تبدأ الأسابيع بيوم الأحد ، والتواريخ التي تسبق يوم الأحد الأول من العام في الأسبوع 0.
  • WEEK (& ltWEEKDAY & gt): إرجاع رقم الأسبوع لـ datetime_expression في النطاق [0 ، 53]. تبدأ الأسابيع في يوم WEEKDAY. التاريخ والوقت قبل أول WEEKDAY من السنة في الأسبوع 0. القيم الصالحة ليوم WEEKDAY هي الأحد والأثنين والثلاثاء والأربعاء والخميس والجمعة والسبت.
  • ISOWEEK: إرجاع رقم أسبوع ISO 8601 الخاص بـ datetime_expression. ISOWEEK تبدأ يوم الاثنين. قيم الإرجاع تقع في النطاق [1 ، 53]. يبدأ ISOWEEK الأول من كل سنة ISO في يوم الاثنين قبل أول خميس من السنة الميلادية.
  • شهر
  • ربع
  • عام
  • ISOYEAR: إرجاع سنة ترقيم الأسابيع ISO 8601 ، وهي السنة الميلادية التي تحتوي على يوم الخميس من الأسبوع الذي ينتمي إليه date_expression.
  • تاريخ
  • زمن

القيم التي تم إرجاعها تقطع الفترات الزمنية ذات الطلبات الأقل. على سبيل المثال ، عند استخراج الثواني ، تقطع EXTRACT قيم الميلي ثانية والميكرو ثانية.

نوع بيانات الإرجاع

INT64 ، باستثناء الحالات التالية:

في المثال التالي ، تُرجع الدالة EXTRACT قيمة مناظرة لجزء الوقت HOUR.

في المثال التالي ، تُرجع الدالة EXTRACT القيم المقابلة لأجزاء زمنية مختلفة من عمود زمني.

في المثال التالي ، يقع datetime_expression في يوم أحد. يحسب EXTRACT العمود الأول باستخدام الأسابيع التي تبدأ يوم الأحد ، ويحسب العمود الثاني باستخدام الأسابيع التي تبدأ يوم الاثنين.

DATETIME_ADD

وصف

يضيف وحدات int64_expression لجزء إلى كائن DATETIME.

يدعم DATETIME_ADD القيم التالية للجزء:

  • ميكروسكوند
  • ميلي ثانية
  • ثانيا
  • دقيقة
  • ساعة
  • يوم
  • أسبوع . ما يعادل 7 أيام.
  • شهر
  • ربع
  • عام

مطلوب معالجة خاصة للأجزاء MONTH و QUARTER و YEAR عندما يكون التاريخ في (أو قريب) من اليوم الأخير من الشهر. إذا كان الشهر الناتج يحتوي على أيام أقل من DATETIME & # 39s الأصلي ، فإن يوم النتيجة هو اليوم الأخير من الشهر الجديد.

نوع بيانات الإرجاع

DATETIME_SUB

وصف

يطرح وحدات int64_expression لجزء من DATETIME.

يدعم DATETIME_SUB القيم التالية للجزء:

  • ميكروسكوند
  • ميلي ثانية
  • ثانيا
  • دقيقة
  • ساعة
  • يوم
  • أسبوع . ما يعادل 7 أيام.
  • شهر
  • ربع
  • عام

مطلوب معالجة خاصة للأجزاء MONTH و QUARTER و YEAR عندما يكون التاريخ في (أو قريب) من اليوم الأخير من الشهر. إذا كان الشهر الناتج يحتوي على أيام أقل من DATETIME & # 39s الأصلي ، فإن يوم النتيجة هو اليوم الأخير من الشهر الجديد.

نوع بيانات الإرجاع

DATETIME_DIFF

وصف

إرجاع عدد الفواصل الزمنية للجزء المحدد بالكامل بين كائنين من عناصر DATETIME (datetime_expression_a - datetime_expression_b). إذا كان DATETIME الأول أقدم من الثاني ، يكون الناتج سالبًا. يُحدث خطأ إذا تجاوز الحساب نوع النتيجة ، مثل إذا تجاوز الاختلاف بالميكروثانية بين كائني DATETIME قيمة INT64.

يدعم DATETIME_DIFF القيم التالية للجزء:

  • ميكروسكوند
  • ميلي ثانية
  • ثانيا
  • دقيقة
  • ساعة
  • يوم
  • الأسبوع: يبدأ جزء التاريخ هذا يوم الأحد.
  • WEEK (& ltWEEKDAY & gt): يبدأ جزء التاريخ هذا في يوم WEEKDAY. القيم الصالحة ليوم WEEKDAY هي الأحد والأثنين والثلاثاء والأربعاء والخميس والجمعة والسبت.
  • ISOWEEK: يستخدم حدود الأسبوع ISO 8601. تبدأ أسابيع ISO يوم الاثنين.
  • شهر
  • ربع
  • عام
  • ISOYEAR: يستخدم حد سنة ترقيم الأسابيع ISO 8601. حدود سنة ISO هي يوم الاثنين من الأسبوع الأول الذي ينتمي يوم الخميس إلى السنة الميلادية المقابلة.

نوع بيانات الإرجاع

يوضح المثال أعلاه نتيجة DATETIME_DIFF لمدة دقيقتين DATETIME تفصل بينهما 24 ساعة. DATETIME_DIFF مع الجزء WEEK تُرجع 1 لأن DATETIME_DIFF تحسب عدد حدود الجزء في هذا النطاق من DATETIME ثانية. يبدأ كل أسبوع يوم الأحد ، لذلك هناك حد واحد للجزء بين السبت ، 14-10-2017 00:00:00 والأحد ، 2017-10-15 00:00:00.

يُظهر المثال التالي نتيجة DATETIME_DIFF لتاريخين في سنوات مختلفة. تقوم DATETIME_DIFF مع جزء التاريخ YEAR بإرجاع 3 لأنها تحسب عدد حدود السنة الميلادية بين جهازي DATETIME ثانية. DATETIME_DIFF مع جزء التاريخ تُرجع ISOYEAR 2 لأن DATETIME الثاني ينتمي إلى عام ISO 2015. كان أول خميس من عام 2015 التقويمي 2015/01-01 ، لذلك تبدأ سنة ISO 2015 في يوم الاثنين السابق ، 2014/12/29 .

يُظهر المثال التالي نتيجة DATETIME_DIFF ليومين متتاليين. يقع التاريخ الأول في يوم الإثنين ويقع التاريخ الثاني في يوم الأحد. DATETIME_DIFF مع جزء التاريخ WEEK ترجع 0 لأن جزء الوقت هذا يستخدم الأسابيع التي تبدأ يوم الأحد. DATETIME_DIFF مع جزء التاريخ WEEK (MONDAY) تُرجع 1. DATETIME_DIFF مع جزء التاريخ ISOWEEK تُرجع أيضًا 1 لأن أسابيع ISO تبدأ يوم الاثنين.

DATETIME_TRUNC

وصف

اقتطاع كائن DATETIME إلى دقة الجزء.

يدعم DATETIME_TRUNC القيم التالية للجزء:

  • ميكروسكوند
  • ميلي ثانية
  • ثانيا
  • دقيقة
  • ساعة
  • يوم
  • أسبوع
  • WEEK (& ltWEEKDAY & gt): اقتطاع التعبير datetime_expression إلى حد الأسبوع السابق ، حيث تبدأ الأسابيع في يوم WEEKDAY. القيم الصالحة ليوم WEEKDAY هي الأحد والأثنين والثلاثاء والأربعاء والخميس والجمعة والسبت.
  • ISOWEEK: اقتطاع datetime_expression إلى حد الأسبوع السابق ISO 8601. ISOWEEK تبدأ يوم الاثنين. يحتوي ISOWEEK الأول من كل سنة ISO على أول خميس من السنة الميلادية المقابلة. أي date_expression يسبق ذلك سيتم اقتطاعه ليوم الاثنين السابق.
  • شهر
  • ربع
  • عام
  • ISOYEAR: اقتطاع datetime_expression إلى حد عام ترقيم الأسابيع ISO 8601 السابق. حدود سنة ISO هي يوم الاثنين من الأسبوع الأول الذي ينتمي يوم الخميس إلى السنة الميلادية المقابلة.

نوع بيانات الإرجاع

في المثال التالي ، يقع DATETIME الأصلي في يوم أحد. نظرًا لأن الجزء هو WEEK (MONDAY) ، فإن DATE_TRUNC تُرجع DATETIME ليوم الاثنين السابق.

في المثال التالي ، يكون تعبير datetime_expression الأصلي في السنة الميلادية 2015. ومع ذلك ، فإن DATETIME_TRUNC مع جزء التاريخ ISOYEAR يقتطع التعبير datetime_expression إلى بداية سنة ISO ، وليس السنة الميلادية. كان أول خميس من السنة التقويمية 2015 هو 01/01/01 ، لذلك تبدأ سنة ISO 2015 في يوم الاثنين السابق ، 2014/12/29. لذلك ، فإن حدود سنة ISO التي تسبق التاريخ والوقت_expression_expression 2015-06-15 00:00:00 هي 2014/12/29.

FORMAT_DATETIME

وصف

ينسق كائن DATETIME وفقًا لـ format_string المحدد. راجع عناصر التنسيق المدعومة لـ DATETIME للحصول على قائمة بعناصر التنسيق التي تدعمها هذه الوظيفة.

نوع بيانات الإرجاع

بالأمس

وصف

إرجاع اليوم الأخير من تعبير تاريخ ووقت يحتوي على التاريخ. يستخدم هذا بشكل شائع لإرجاع اليوم الأخير من الشهر.

يمكنك اختياريا تحديد جزء التاريخ الذي تم إرجاع آخر يوم له. إذا لم يتم استخدام هذه المعلمة ، فإن القيمة الافتراضية هي MONTH. تدعم LAST_DAY القيم التالية لـ date_part:

  • عام
  • ربع
  • شهر
  • أسبوع . ما يعادل 7 أيام.
  • WEEK (& ltWEEKDAY & GT). يمثل & ltWEEKDAY & gt يوم بداية الأسبوع. القيم الصالحة هي الأحد ، والأثنين ، والثلاثاء ، والأربعاء ، والخميس ، والجمعة ، والسبت.
  • إيسويك. يستخدم حدود الأسبوع ISO 8601. تبدأ أسابيع ISO يوم الاثنين.
  • ISOYEAR. يستخدم حد سنة ترقيم الأسابيع ISO 8601. حدود سنة ISO هي يوم الإثنين من الأسبوع الأول الذي ينتمي يوم الخميس إلى السنة الميلادية المقابلة.

نوع بيانات الإرجاع

كلاهما يعود في اليوم الأخير من الشهر:

يقوم هذا بإرجاع اليوم الأخير من السنة:

يعيد هذا اليوم الأخير من الأسبوع للأسبوع الذي يبدأ يوم الأحد:

يعيد هذا اليوم الأخير من الأسبوع للأسبوع الذي يبدأ بيوم الاثنين:

PARSE_DATETIME

وصف

يحتوي format_string على عناصر التنسيق التي تحدد كيفية تنسيق datetime_string. يجب أن يكون لكل عنصر في datetime_string عنصر مقابل في format_string. يجب أن يتطابق موقع كل عنصر في format_string مع موقع كل عنصر في datetime_string.

تدعم سلسلة التنسيق معظم عناصر التنسيق بشكل كامل ، باستثناء٪ Q و٪ a و٪ A و٪ g و٪ G و٪ j و٪ P و٪ u و٪ U و٪ V و٪ w و٪ W.

يوزع PARSE_DATETIME السلسلة وفقًا للقواعد التالية:

  • حقول غير محددة. أي حقل غير محدد تمت تهيئته من 1970-01-01 00: 00: 00.0. على سبيل المثال ، إذا كان العام غير محدد ، فسيتم تعيينه افتراضيًا على 1970.
  • الأسماء غير الحساسة لحالة الأحرف. الأسماء ، مثل الاثنين وفبراير ، غير حساسة لحالة الأحرف.
  • مسافة بيضاء. مسافة بيضاء متتالية واحدة أو أكثر في سلسلة التنسيق تطابق صفرًا أو أكثر من المسافات البيضاء المتتالية في سلسلة DATETIME. يُسمح دائمًا بالمسافات البيضاء البادئة والزائدة في سلسلة DATETIME ، حتى لو لم تكن موجودة في سلسلة التنسيق.
  • أسبقية التنسيق. عندما يحتوي عنصرين أو أكثر من عناصر التنسيق على معلومات متداخلة ، فإن العنصر الأخير يتخطى بشكل عام أي عناصر سابقة ، مع بعض الاستثناءات. على سبيل المثال ، يؤثر كل من٪ F و٪ Y على السنة ، لذلك يتجاوز العنصر السابق العنصر الأحدث. راجع أوصاف٪ s و٪ C و٪ y في عناصر التنسيق المدعومة لـ DATETIME.

نوع بيانات الإرجاع

تحلل الأمثلة التالية سلسلة حرفية باعتبارها DATETIME.

يوزع المثال التالي سلسلة حرفية تحتوي على تاريخ بتنسيق لغة طبيعية مثل DATETIME.

عناصر التنسيق المعتمدة لـ DATETIME

ما لم يُذكر خلاف ذلك ، تدعم دالات DATETIME التي تستخدم سلاسل التنسيق العناصر التالية:

عنصر التنسيق وصف مثال
٪أ اسم يوم الأسبوع الكامل. الأربعاء
٪أ اسم يوم الأسبوع المختصر. الأربعاء
٪ب اسم الشهر بالكامل. كانون الثاني
٪ b أو٪ h اسم الشهر المختصر. يناير
٪ ج القرن (سنة مقسومة على 100 ويتم اقتطاعها إلى عدد صحيح) كرقم عشري (00-99). 20
٪ ج تمثيل التاريخ والوقت. الأربعاء 20 يناير 21:47:00 2021
٪د التاريخ بالتنسيق٪ m /٪ d /٪ y. 01/20/21
٪د يوم الشهر كرقم عشري (01-31). 20
٪ ه اليوم من الشهر كرقم عشري (1-31) رقم مفرد مسبوق بمسافة. 20
٪F التاريخ بالتنسيق٪ Y-٪ m-٪ d. 2021-01-20
٪ ز العام ISO 8601 مع القرن كرقم عشري. تبدأ كل سنة ISO في يوم الاثنين قبل أول خميس من السنة الميلادية. لاحظ أن٪ G و٪ Y قد يؤديان إلى نتائج مختلفة بالقرب من حدود السنة الميلادية ، حيث يمكن أن تتباعد السنة الميلادية وسنة ISO. 2021
٪ ز عام ISO 8601 بدون قرن كرقم عشري (00-99). تبدأ كل سنة ISO في يوم الاثنين قبل أول خميس من السنة الميلادية. لاحظ أن٪ g و٪ y قد يؤديان إلى نتائج مختلفة بالقرب من حدود السنة الميلادية ، حيث يمكن أن تتباعد السنة الميلادية وسنة ISO. 21
٪ ح الساعة (تنسيق 24 ساعة) كرقم عشري (00-23). 21
٪أنا الساعة (تنسيق 12 ساعة) كرقم عشري (01-12). 09
٪ j يوم من السنة كرقم عشري (001-366). 020
٪ك الساعة (تنسيق 24 ساعة) كرقم عشري (0-23) رقم فردي مسبوق بمسافة. 21
٪ l الساعة (12 ساعة) كرقم عشري (1-12) رقم واحد مسبوق بمسافة. 9
٪ م الدقيقة كرقم عشري (00-59).
٪ م الشهر كرقم عشري (01-12). 01
٪ن حرف جديد.
٪ P إما صباحا أو مساءا. مساء
٪ ص إما صباحًا أو مساءً. مساء
٪ س الربع في صورة عدد عشري (1-4). 1
٪ ر الوقت بالتنسيق٪ H:٪ M. 21:47
٪ r التوقيت بتنسيق 12 ساعة باستخدام تدوين صباحًا / مساءً. 09:47:00 مساءً
٪س الثاني كرقم عشري (00-60). 00
٪س عدد الثواني منذ 1970-01-01 00:00:00. يتجاوز دائمًا كل عناصر التنسيق الأخرى ، بغض النظر عن مكان ظهور٪ s في السلسلة. إذا ظهرت عدة عناصر٪ s ، فسيكون للعنصر الأخير الأسبقية. 1611179220
٪ ت الوقت بالتنسيق٪ H:٪ M:٪ S. 21:47:00
٪ t حرف جدولة.
٪ ش رقم الأسبوع من السنة (الأحد كأول يوم في الأسبوع) كرقم عشري (00-53). 03
٪ u يوم الأسبوع (الاثنين كأول يوم في الأسبوع) كرقم عشري (1-7). 3
٪الخامس رقم أسبوع ISO 8601 من العام (الاثنين كأول يوم في الأسبوع) كرقم عشري (01-53). إذا كان الأسبوع الذي يحتوي على 1 كانون الثاني (يناير) يحتوي على أربعة أيام أو أكثر في العام الجديد ، فسيكون الأسبوع الأول ، وإلا فسيكون الأسبوع 53 من العام السابق ، والأسبوع التالي هو الأسبوع الأول. 03
٪ واط رقم الأسبوع من السنة (الاثنين كأول يوم في الأسبوع) كرقم عشري (00-53). 03
٪ w يوم الأسبوع (الأحد كأول يوم في الأسبوع) كرقم عشري (0-6). 3
٪ X تمثيل الوقت بتنسيق HH: MM: SS. 21:47:00
٪ x تمثيل التاريخ بتنسيق MM / DD / YY. 01/20/21
٪ ص السنة مع القرن كرقم عشري. 2021
٪ ص السنة بدون قرن كرقم عشري (00-99) ، بصفر بادئ اختياري. يمكن مزجه مع٪ C. إذا لم يتم تحديد٪ C ، فإن السنوات 00-68 هي 2000s ، بينما السنوات 69-99 هي 1900. 21
%% حرف واحد٪. %
٪ E # S الثواني ذات # رقم من الدقة الجزئية. 00.000
٪ E * S الثواني بدقة كسرية كاملة (حرف "*"). 00
٪ E4Y أربعة أحرف سنوات (0001 .9999). لاحظ أن٪ Y ينتج العديد من الأحرف بقدر ما يتطلبه الأمر لتصيير السنة بالكامل. 2021

باستثناء ما هو مذكور بخلاف ذلك ، يتم ترخيص محتوى هذه الصفحة بموجب ترخيص Creative Commons Attribution 4.0 ، كما يتم ترخيص نماذج التعليمات البرمجية بموجب ترخيص Apache 2.0. للحصول على تفاصيل ، راجع سياسات موقع Google Developers. Java هي علامة تجارية مسجلة لشركة Oracle و / أو الشركات التابعة لها.


الطرق التي يمكنك استخدامها لتمرير تمثيلات السلسلة لقيم التاريخ / الوقت بين X ++ و .NET هي كما يلي:

System.DateTime.GetDateTimeFormats (أدخل System.Char of s.)

لم يقم أي من System.Convert :: ToString أو System.DateTime.ToString بإخراج تنسيق يمكن إدخاله بواسطة DateTimeUtil :: Parse.

تنسيق سلسلة ISO للتاريخ / الوقت

تنسيق الإخراج لـ DateTimeUtil :: toStr و System.DateTime.GetDateTimeFormats هو yyyy-mm-ddThh: mm: ss بتنسيق 24 ساعة (بدون AM أو PM) ، مع الأصفار البادئة. على سبيل المثال ، 20 يوليو 2007 في تمام الساعة 1:45 مساءً سيكون الناتج كـ 2007-07-20 T13: 45: 00. تنسيق السلسلة هذا هو معيار منظمة المعايير الدولية (ISO).

يتم إدخال تنسيق سلسلة ISO هذا في DateTimeUtil :: parse و System.DateTime :: Parse. لتحويل السلسلة إلى نوع التاريخ / الوقت.

عينة من التحويل بين التاريخ / الوقت والسلسلة

يوضح نموذج رمز X ++ التالي كيف يمكن تمرير السلاسل المتوافقة بين .NET و X ++ وتحويلها إلى متغيرات التاريخ / الوقت.


حول "نصائح ضمان الجودة"

W3C QA Tips هي وثائق قصيرة تشرح أجزاء مفيدة من المعرفة لمطوري الويب أو المصممين ، تستضيفها وتنتجها مجموعة اهتمامات ضمان الجودة في W3C.

بينما تتم مراجعة النصائح بعناية من قبل المشاركين في المجموعة ، لا ينبغي النظر إليها على أنها أي شيء آخر غير أجزاء مفيدة من الحكمة ، وعلى وجه الخصوص ، فهي ليس المواصفات الفنية المعيارية W3C.

تعرف على المزيد حول النصائح ، وكيفية إرسال لآلئ الحكمة الخاصة بك ، والعثور على جميع نصائح ضمان الجودة الأخرى في فهرس النصائح.

حقوق النشر والنسخ 1994-2006 W3C & reg (MIT، ERCIM، Keio) ، جميع الحقوق محفوظة. تنطبق قواعد مسؤولية W3C والعلامة التجارية واستخدام المستندات وترخيص البرامج. تتماشى تفاعلاتك مع هذا الموقع مع بيانات الخصوصية العامة وبيانات الأعضاء.


لا يمكنك الحصول على سلسلة فارغة لأنك تقوم بإرجاع نوع قيمة التاريخ من ISNULL.

ترجع نفس نوع check_expression. إذا تم توفير NULL حرفيًا كـ check_expression ، يتم إرجاع نوع البيانات الخاص بـ replace_value. إذا تم توفير NULL حرفيًا كـ check_expression ولم يتم توفير replace_value ، يتم إرجاع عدد صحيح.

إذا كنت تتحقق مما إذا كانت القيمة فارغة أم لا ، فلا داعي لتحويلها إلى تاريخ ، إلا إذا كنت تريد إرجاع قيمة التاريخ (التي يبدو أنك لا تريدها).

التاريخ الفارغ هو NULL (بلا قيمة). من ناحية أخرى ، يتم تقييم السلسلة الفارغة إلى 0 ، والتي تمثل ضمنيًا في SQL Server عددًا صحيحًا يمثل عدد الأيام منذ 1900-01-01.


وظائف التاريخ والوقت في إمبالا

أنواع بيانات Impala الأساسية لبيانات التاريخ والوقت هي TIMESTAMP و DATE.

  • يتم إيقاف الإعداد افتراضيًا ، مما يعني أن الدالات مثل FROM_UNIXTIME () و UNIX_TIMESTAMP () تراعي قيم الإدخال لتمثل دائمًا المنطقة الزمنية UTC.
  • يتم تطبيق الإعداد أيضًا عند CAST () قيمة BIGINT إلى TIMESTAMP ، أو قيمة TIMESTAMP إلى BIGINT. عند تمكين هذا الإعداد ، يتم تحويل هذه الوظائف والعمليات من وإلى القيم التي تمثل المنطقة الزمنية المحلية. راجع نوع بيانات TIMESTAMP للحصول على تفاصيل حول كيفية معالجة Impala اعتبارات المنطقة الزمنية لنوع بيانات TIMESTAMP.

مرجع الوظيفة:

تدعم إمبالا وظائف التاريخ والوقت التالية:

  • ADD_MONTHS
  • إضافة تاريخ
  • التاريخ الحالي
  • حالة الزمن حاليا
  • DATE_ADD
  • DATE_PART
  • DATE_SUB
  • DATE_TRUNC
  • DATEDIFF
  • يوم
  • DAYNAME
  • يوم من الأسبوع
  • يوم
  • DAYS_ADD
  • DAYS_SUB
  • مقتطف
  • FROM_TIMESTAMP
  • من_UNIXTIME
  • FROM_UTC_TIMESTAMP
  • ساعة
  • HOURS_ADD
  • HOURS_SUB
  • INT_MONTHS_BETWEEN
  • MICROSECONDS_ADD
  • MICROSECONDS_SUB
  • ميلي ثانية
  • ملي ثانية_إضافة
  • ملي ثانية
  • دقيقة
  • MINUTES_ADD
  • MINUTES_SUB
  • شهر
  • MONTHNAME
  • MONTHS_ADD
  • MONTHS_BETWEEN
  • MONTHS_SUB
  • NANOSECONDS_ADD
  • NANOSECONDS_SUB
  • اليوم التالي
  • الآن
  • ربع
  • ثانيا
  • SECONDS_ADD
  • SECONDS_SUB
  • تاريخ
  • وقت اليوم
  • TIMESTAMP_CMP
  • حتى تاريخه
  • TO_TIMESTAMP
  • TO_UTC_TIMESTAMP
  • TRUNC
  • UNIX_TIMESTAMP
  • UTC_TIMESTAMP
  • ويكوفيير
  • WEEKS_ADD
  • WEEKS_SUB
  • عام
  • YEARS_ADD
  • YEARS_SUB

ملاحظات الاستخدام:

مثل MONTHS_ADD (). متوفر في Impala 1.4 وما بعده. للتوافق عند نقل التعليمات البرمجية مع ملحقات البائعين.

ADDDATE (TIMESTAMP / DATE date، INT / BIGINT من الأيام) غرض: إضافة أيام حتى تاريخه وإرجاع قيمة التاريخ الجديد.

يمكن أن تكون قيمة الأيام سالبة ، مما يعطي نفس نتيجة الدالة SUBDATE ().

يتم تقييم أي إشارات إلى الدالة CURRENT_DATE () في بداية الاستعلام. جميع الاستدعاءات لـ CURRENT_DATE () في نفس الاستعلام ترجع نفس القيمة ، ولا تعتمد القيمة على المدة التي يستغرقها الاستعلام.

نوع الإرجاع: تاريخ

حالة الزمن حاليا() غرض: الاسم المستعار لوظيفة NOW ().

نوع الإرجاع: الطابع الزمني

DATE_ADD (TIMESTAMP / DATE date، INT / BIGINT من الأيام)، DATE_ADD (TIMESTAMP / DATE date، periodal_expression) غرض: يضيف عددًا محددًا من الأيام إلى وسيطة التاريخ. باستخدام تعبير INTERVAL كوسيطة ثانية ، يمكنك حساب قيمة دلتا باستخدام وحدات أخرى مثل الأسابيع والسنوات والساعات والثواني وما إلى ذلك ، راجع TIMESTAMP Data Type للحصول على التفاصيل.

تُظهر الأمثلة التالية التدوين المختصر لتعبير INTERVAL ، بدلاً من تحديد عدد الأيام بدقة. يتيح لك تدوين INTERVAL أيضًا العمل بوحدات أصغر من يوم واحد.

مثل كل دالات التاريخ / الوقت التي تتعامل مع الأشهر ، تتعامل date_add () مع التواريخ غير الموجودة التي تتجاوز نهاية الشهر عن طريق تعيين التاريخ إلى اليوم الأخير من الشهر. يوضح المثال التالي كيف يتم تسوية التاريخ غير الموجود في 31 أبريل إلى 30 أبريل:

  • 0 إذا كانت التواريخ متطابقة.
  • 1 if date1 & gt date2.
  • -1 إذا كان التاريخ 1 & lt التاريخ 2.
  • NULL إذا كان date1 أو date2 هو NULL.

نوع الإرجاع: ذكاء

DATE_PART (STRING جزء ، TIMESTAMP / DATE التاريخ) غرض: على غرار EXTRACT () ، مع عكس ترتيب الوسيطة. يدعم نفس وحدات التاريخ والوقت مثل EXTRACT (). للتوافق مع كود SQL الذي يحتوي على امتدادات البائعين.

نوع الإرجاع: كبير

DATE_SUB (TIMESTAMP startdate، INT days)، DATE_SUB (TIMESTAMP startdate، periodal_expression) غرض: يطرح عددًا محددًا من الأيام من قيمة TIMESTAMP. باستخدام تعبير INTERVAL كوسيطة ثانية ، يمكنك حساب قيمة دلتا باستخدام وحدات أخرى مثل الأسابيع والسنوات والساعات والثواني وما إلى ذلك ، راجع TIMESTAMP Data Type للحصول على التفاصيل.

يوضح المثال التالي أبسط استخدام لطرح عدد محدد من الأيام من قيمة TIMESTAMP:

تُظهر الأمثلة التالية التدوين المختصر لتعبير INTERVAL ، بدلاً من تحديد عدد الأيام الدقيق. يتيح لك تدوين INTERVAL أيضًا العمل بوحدات أصغر من يوم واحد.

مثل كل دالات التاريخ / الوقت التي تتعامل مع الأشهر ، تتعامل date_add () مع التواريخ غير الموجودة التي تتجاوز نهاية الشهر عن طريق تعيين التاريخ إلى اليوم الأخير من الشهر. يوضح المثال التالي كيف يتم تسوية التاريخ غير الموجود في 31 أبريل إلى 30 أبريل:

DATE_TRUNC (STRING وحدة ، TIMESTAMP / DATE ts) غرض: إرجاع القيمة ts المقتطعة إلى الوحدة المحددة.

جدال: وسيطة الوحدة ليست حساسة لحالة الأحرف. يمكن أن تكون سلسلة الوسيطة هذه واحدة من:

وحدة معتمد لـ TIMESTAMP مدعوم في DATE
"ميكروسكوندس" نعم لا
"ملي ثانية" نعم لا
'ثانيا' نعم لا
'دقيقة' نعم لا
'ساعة' نعم لا
'يوم' نعم نعم
'أسبوع' نعم نعم
'شهر' نعم نعم
'عام' نعم نعم
'عقد، عشر سنوات' نعم نعم
'مئة عام' نعم نعم
'الألفية' نعم نعم

تمت إضافته في: إمبالا 2.11.0

ملاحظات الاستخدام:

على الرغم من أن هذه الوظيفة تشبه استدعاء TRUNC () باستخدام وسيطة TIMESTAMP أو DATE ، يختلف ترتيب الوسائط والوحدات التي تم التعرف عليها بين TRUNC () و DATE_TRUNC (). لذلك ، هذه الوظائف غير قابلة للتبديل.

تُستخدم هذه الوظيفة عادةً في استعلامات GROUP BY لتجميع النتائج من نفس الساعة واليوم والأسبوع والشهر والربع وما إلى ذلك. يمكنك أيضًا استخدام هذه الوظيفة في INSERT. حدد في جدول مقسم لتقسيم قيم TIMESTAMP أو DATE إلى القسم الصحيح.

  • TIMESTAMP إذا كانت الوسيطة الثانية ، ts ، هي TIMESTAMP.
  • DATE إذا كانت الوسيطة الثانية ، ts ، هي DATE.

إرجاع DATE_TRUNC ('HOUR'، NOW ()) 2017-12-05 13:00:00.

إرجاع DATE_TRUNC ('MILLENNIUM' ، DATE'2019-08-02 ') 2001-01-01.

DATEDIFF (TIMESTAMP / DATE enddate ، TIMESTAMP / DATE startdate) غرض: ترجع عدد الأيام من تاريخ البدء إلى تاريخ الانتهاء.

إذا كان enddate & gt startdate ، تكون القيمة المرجعة موجبة.

إذا كان enddate & lt startdate ، تكون القيمة المرجعة سالبة.

إذا كان enddate = startdate ، فإن القيمة المرجعة هي صفر.

نوع الإرجاع: ذكاء

ملاحظات الاستخدام:

يتم تجاهل الأجزاء الزمنية لقيم تاريخ الانتهاء وتاريخ البدء. على سبيل المثال ، 11:59 مساءً في يوم واحد و 12:01 صباحًا في اليوم التالي تمثل DATEDIFF () من -1 لأن قيم التاريخ / الوقت تمثل أيامًا مختلفة ، على الرغم من اختلاف قيم TIMESTAMP بمقدار دقيقتين فقط.

DAY (TIMESTAMP / DATE date) ، DAYOFMONTH (TIMESTAMP / DATE date) غرض: تُرجع قيمة اليوم من وسيطة التاريخ. تمثل القيمة يومًا من الشهر ، لذلك تقع في النطاق من 1 إلى 31 ، أو أقل للأشهر بدون 31 يومًا.

إرجاع NULL لتواريخ غير موجودة ، على سبيل المثال 30 فبراير ، أو سلاسل التاريخ المنسقة بشكل غير صحيح ، على سبيل المثال "1999-02-013".

نوع الإرجاع: ذكاء

DAYNAME (TIMESTAMP / DATE التاريخ) غرض: إرجاع اسم اليوم لوسيطة التاريخ. نطاق قيم الإرجاع هو "الأحد" إلى "السبت". تُستخدم في استعلامات إنشاء التقارير ، كبديل لاستدعاء DAYOFWEEK () وتحويل قيمة الإرجاع الرقمية إلى سلسلة باستخدام تعبير CASE.

نوع الإرجاع: خيط

DAYOFWEEK (TIMESTAMP / DATE date) غرض: تُرجع حقل اليوم من وسيطة التاريخ المطابق ليوم الأسبوع. نطاق قيم الإرجاع هو 1 (الأحد) إلى 7 (السبت).

نوع الإرجاع: ذكاء

DAYOFYEAR (TIMESTAMP / DATE date) غرض: إرجاع حقل اليوم من وسيطة التاريخ المطابق ليوم السنة. نطاق قيم الإرجاع هو 1 (1 يناير) إلى 366 (31 ديسمبر من سنة كبيسة).

نوع الإرجاع: ذكاء

DAYS_ADD (TIMESTAMP / DATE التاريخ ، INT / BIGINT من الأيام) غرض: ترجع القيمة مع عدد الأيام المضافة حتى تاريخه.

جدال: قيمة وسيطة الوحدة ليست حساسة لحالة الأحرف. يمكن أن تكون سلسلة الوحدة واحدة مما يلي:

وحدة معتمد لـ TIMESTAMP ts معتمد لـ DATE ts
"إيبوك" نعم لا
"ميلي ثانية" نعم لا
'ثانيا' نعم لا
'دقيقة' نعم لا
'ساعة' نعم لا
'يوم' نعم نعم
'شهر' نعم نعم
'ربع' نعم نعم
'عام' نعم نعم

ملاحظات الاستخدام:

تُستخدم عادةً في استعلامات GROUP BY لترتيب النتائج حسب الساعة واليوم والشهر وما إلى ذلك. يمكنك أيضًا استخدام هذه الوظيفة في INSERT. عبارة SELECT لإدراجها في جدول مقسم لتقسيم قيم TIMESTAMP إلى أجزاء فردية ، إذا كان الجدول المقسم يحتوي على أعمدة مفاتيح قسم منفصلة تمثل السنة والشهر واليوم وما إلى ذلك. إذا كنت بحاجة إلى القسمة على وحدات زمنية أكثر تعقيدًا ، على سبيل المثال حسب الأسبوع أو حسب الربع ، فاستخدم الدالة TRUNC () بدلاً من ذلك.

نوع الإرجاع: كبير

EXTRACT (اليوم من التاريخ'2019-08-17 ') يعود 17.

إذا حددت "MILLISECOND" لوسيطة الوحدة ، فإن الدالة ترجع مكون الثواني ومكون المللي ثانية.

يُرجع EXTRACT (CAST ('2006-05-12 18: 27: 28.123456789' AS TIMESTAMP) ، 'MILLISECOND') 28123.

FROM_TIMESTAMP (تاريخ ووقت TIMESTAMP ، نمط STRING) ، FROM_TIMESTAMP (STRING تاريخًا ووقتًا ، نمط STRING) غرض: يحول قيمة TIMESTAMP إلى سلسلة تمثل نفس القيمة.

نوع الإرجاع: خيط

ملاحظات الاستخدام:

توفر الدالة FROM_TIMESTAMP () طريقة مرنة لتحويل قيم TIMESTAMP إلى تنسيقات سلسلة عشوائية لأغراض إعداد التقارير.

نظرًا لأن Impala تقوم ضمنيًا بتحويل قيم السلسلة إلى TIMESTAMP ، يمكنك تمرير قيم التاريخ / الوقت الممثلة كسلاسل (بتنسيق yyyy-MM-dd HH: mm: ss.SSS القياسي) إلى هذه الوظيفة. والنتيجة هي سلسلة تستخدم أحرفًا فاصلة مختلفة ، أو ترتيب الحقول ، أو أسماء الأشهر المكتوبة ، أو أي شكل آخر من أشكال تمثيل سلسلة التاريخ / الوقت.

الرموز المميزة المسموح بها لسلسلة النمط هي نفسها للدالة FROM_UNIXTIME ().

FROM_UNIXTIME (BIGINT unixtime [، نمط STRING]) غرض: يحول عدد الثواني من حقبة Unix إلى الوقت المحدد إلى سلسلة في المنطقة الزمنية المحلية.

نوع الإرجاع: خيط

تدعم سلسلة النمط المجموعة الفرعية التالية من Java SimpleDateFormat.

نمط وصف
ذ سنة
م شهر
د يوم
ح ساعة
م دقيقة
س ثانية
س كسور ثانية
+/- ساعة: مم معادلة المنطقة الزمنية
+/- همم معادلة المنطقة الزمنية
+/- ح معادلة المنطقة الزمنية

تنطبق القواعد التالية على سلسلة النمط:

  • سلسلة النمط حساسة لحالة الأحرف.
  • جميع الحقول متغيرة الطول ، وبالتالي يجب استخدام الفواصل لتحديد حدود الحقول ، باستثناء قيم المنطقة الزمنية.
  • يجب أن تكون تنسيقات إزاحة المنطقة الزمنية في نهاية سلسلة النمط.
  • يمكن أن تظهر مجموعات الأحرف المنسقة بأي ترتيب مع أي فواصل باستثناء إزاحة المنطقة الزمنية. على سبيل المثال:
    • س س س / ش ش / ي ي
    • dd-MMM-yy
    • (dd) (MM) (yyyy) HH: mm: ss
    • yyyy-MM-dd HH:mm:ss+hh:mm

    In Impala 1.3 and later, you can switch the order of elements, use alternative separator characters, and use a different number of placeholders for each unit. Adding more instances of y , d , H , and so on produces output strings zero-padded to the requested number of characters. The exception is M for months, where M produces a non-padded value such as 3 , MM produces a zero-padded value such as 03 , MMM produces an abbreviated month name such as Mar , and sequences of 4 or more M are not allowed.

    A date string including all fields could be 'yyyy-MM-dd HH:mm:ss.SSSSSS' , 'dd/MM/yyyy HH:mm:ss.SSSSSS' , 'MMM dd, yyyy HH.mm.ss (SSSSSS)' or other combinations of placeholders and separator characters.

    In Impala 2.2.0 and higher, built-in functions that accept or return integers representing TIMESTAMP values use the BIGINT type for parameters and return values, rather than INT . This change lets the date and time functions avoid an overflow error that would otherwise occur on January 19th, 2038 (known as the "Year 2038 problem" or "Y2K38 problem" ). This change affects the FROM_UNIXTIME() and UNIX_TIMESTAMP() functions. You might need to change application code that interacts with these functions, change the types of columns that store the return values, or add CAST() calls to SQL statements that call these functions.

    Usage notes:

    The way this function deals with time zones when converting to or from TIMESTAMP values is affected by the ‑‑use_local_tz_for_unix_timestamp_conversions startup flag for the impalad daemon. See TIMESTAMP Data Type for details about how Impala handles time zone considerations for the TIMESTAMP data type.

    FROM_UTC_TIMESTAMP(TIMESTAMP ts, STRING timezone) Purpose: Converts a specified UTC timestamp value into the appropriate value for a specified time zone.

    نوع الإرجاع: TIMESTAMP

    Usage notes: Often used to translate UTC time zone data stored in a table back to the local date and time for reporting. The opposite of the TO_UTC_TIMESTAMP() function.

    To determine the time zone of the server you are connected to, in Impala 2.3 and higher you can call the timeofday() function, which includes the time zone specifier in its return value. Remember that with cloud computing, the server you interact with might be in a different time zone than you are, or different sessions might connect to servers in different time zones, or a cluster might include servers in more than one time zone.

    See discussion of time zones in TIMESTAMP Data Type for information about using this function for conversions between the local time zone and UTC.

    HOUR(TIMESTAMP ts) Purpose: Returns the hour field from a TIMESTAMP field.

    نوع الإرجاع: INT

    HOURS_ADD(TIMESTAMP date, INT hours), HOURS_ADD(TIMESTAMP date, BIGINT hours) Purpose: Returns the specified date and time plus some number of hours.

    نوع الإرجاع: TIMESTAMP

    HOURS_SUB(TIMESTAMP date, INT hours), HOURS_SUB(TIMESTAMP date, BIGINT hours) Purpose: Returns the specified date and time minus some number of hours.

    نوع الإرجاع: TIMESTAMP

    INT_MONTHS_BETWEEN(TIMESTAMP / DATE enddate, TIMESTAMP / DATE startdate) Purpose: Returns the number of months from startdate to enddate , representing only the full months that passed.

    نوع الإرجاع: INT

    Added in: Impala 2.3.0

    Usage notes:

    Typically used in business contexts, for example to determine whether a specified number of months have passed or whether some end-of-month deadline was reached.

    The method of determining the number of elapsed months includes some special handling of months with different numbers of days that creates edge cases for dates between the 28th and 31st days of certain months. See MONTHS_BETWEEN() for details. The INT_MONTHS_BETWEEN() result is essentially the FLOOR() of the MONTHS_BETWEEN() result.

    If either value is NULL , which could happen for example when converting a nonexistent date string such as '2015-02-29' to a TIMESTAMP , the result is also NULL .

    If the first argument represents an earlier time than the second argument, the result is negative.

    LAST_DAY(TIMESTAMP / DATE ts) Purpose: Returns the beginning of the last calendar day in the same month of ts .

    • Returns TIMESTAMP if ts is of the TIMESTAMP type.
    • Returns DATE if ts is of the DATE type.

    Added in: Impala 2.9.0

    Usage notes:

    If the input argument does not represent a valid Impala TIMESTAMP including both date and time portions, the function returns NULL . For example, if the input argument is a string that cannot be implicitly cast to TIMESTAMP , does not include a date portion, or is out of the allowed range for Impala TIMESTAMP values, the function returns NULL .

    MICROSECONDS_ADD(TIMESTAMP date, INT microseconds), MICROSECONDS_ADD(TIMESTAMP date, BIGINT microseconds) Purpose: Returns the specified date and time plus some number of microseconds.

    نوع الإرجاع: TIMESTAMP

    MICROSECONDS_SUB(TIMESTAMP date, INT microseconds), MICROSECONDS_SUB(TIMESTAMP date, BIGINT microseconds) Purpose: Returns the specified date and time minus some number of microseconds.

    نوع الإرجاع: TIMESTAMP

    MILLISECOND(TIMESTAMP ts) Purpose: Returns the millisecond portion of a TIMESTAMP value.

    نوع الإرجاع: INT

    Added in: Impala 2.5.0

    Usage notes:

    The millisecond value is truncated, not rounded, if the TIMESTAMP value contains more than 3 significant digits to the right of the decimal point.

    MILLISECONDS_ADD(TIMESTAMP date, INT milliseconds), MILLISECONDS_ADD(TIMESTAMP date, BIGINT milliseconds) Purpose: Returns the specified date and time plus some number of milliseconds.

    نوع الإرجاع: TIMESTAMP

    MILLISECONDS_SUB(TIMESTAMP date, INT milliseconds), MILLISECONDS_SUB(TIMESTAMP date, BIGINT milliseconds) Purpose: Returns the specified date and time minus some number of milliseconds.

    نوع الإرجاع: TIMESTAMP

    MINUTE(TIMESTAMP date) Purpose: Returns the minute field from a TIMESTAMP value.

    نوع الإرجاع: INT

    MINUTES_ADD(TIMESTAMP date, INT minutes), MINUTES_ADD(TIMESTAMP date, BIGINT minutes) Purpose: Returns the specified date and time plus some number of minutes.

    نوع الإرجاع: TIMESTAMP

    MINUTES_SUB(TIMESTAMP date, INT minutes), MINUTES_SUB(TIMESTAMP date, BIGINT minutes) Purpose: Returns the specified date and time minus some number of minutes.

    نوع الإرجاع: TIMESTAMP

    MONTH(TIMESTAMP / DATE date) Purpose: Returns the month field, represented as an integer, from the date argument.

    نوع الإرجاع: INT

    MONTHNAME(TIMESTAMP / DATE date) Purpose: Returns the month name of the date argument.

    نوع الإرجاع: STRING

    MONTHS_ADD(TIMESTAMP / DATE date, INT / BIGINT months) Purpose: Returns the value with the number of months added to date .

    Usage notes:

    If date is the last day of a month, the return date will fall on the last day of the target month, e.g. MONTHS_ADD(DATE'2019-01-31', 1) returns DATE'2019-02-28' .

    MONTHS_BETWEEN(TIMESTAMP / DATE enddate, TIMESTAMP / DATE startdate) Purpose: Returns the number of months from startdate to enddate . This result can include a fractional part representing extra days in addition to the full months between the dates. The fractional component is computed by dividing the difference in days by 31 (regardless of the month).

    نوع الإرجاع: DOUBLE

    Added in: Impala 2.3.0

    Usage notes:

    Typically used in business contexts, for example to determine whether a specified number of months have passed or whether some end-of-month deadline was reached.

    If the only consideration is the number of full months and any fractional value is not significant, use INT_MONTHS_BETWEEN() instead.

    The method of determining the number of elapsed months includes some special handling of months with different numbers of days that creates edge cases for dates between the 28th and 31st days of certain months.

    If either value is NULL , which could happen for example when converting a nonexistent date string such as '2015-02-29' to a TIMESTAMP , the result is also NULL .

    If the first argument represents an earlier time than the second argument, the result is negative.

    The time portion of the input arguements are ignored.

    MONTHS_SUB(TIMESTAMP / DATE date, INT / BIGINT months) Purpose: Returns the value with the number of months subtracted from date .

    Usage notes:

    If date is the last day of a month, the return date will fall on the last day of the target month, e.g. MONTHS_SUB(DATE'2019-02-28', 1) returns DATE'2019-01-31' .

    NANOSECONDS_ADD(TIMESTAMP date, INT nanoseconds), NANOSECONDS_ADD(TIMESTAMP date, BIGINT nanoseconds) Purpose: Returns the specified date and time plus some number of nanoseconds.

    نوع الإرجاع: TIMESTAMP

    Kudu considerations:

    The nanosecond portion of an Impala TIMESTAMP value is rounded to the nearest microsecond when that value is stored in a Kudu table.

    NANOSECONDS_SUB(TIMESTAMP date, INT nanoseconds), NANOSECONDS_SUB(TIMESTAMP date, BIGINT nanoseconds) Purpose: Returns the specified date and time minus some number of nanoseconds.

    نوع الإرجاع: TIMESTAMP

    Kudu considerations:

    The nanosecond portion of an Impala TIMESTAMP value is rounded to the nearest microsecond when that value is stored in a Kudu table.

    NEXT_DAY(TIMESTAMP / DATE date, STRING weekday) Purpose: Returns the date of the weekday that follows the specified date .

    Argument: The weekday is not case-sensitive.

    The following values are accepted for weekday : "Sunday" / "Sun" , "Monday" / "Mon" , "Tuesday" / "Tue" , "Wednesday" / "Wed" , "Thursday" / "Thu" , "Friday" / "Fri" , "Saturday" / "Sat"

    • Returns TIMESTAMP if date is of the TIMESTAMP type.
    • Returns DATE if date is of the DATE type.

    NEXT_DAY('2013-12-25','Saturday') returns '2013-12-28 00:00:00' which is the first Saturday after December 25, 2013.

    NOW() Purpose: Returns the current date and time (in the local time zone) as a TIMESTAMP value.

    نوع الإرجاع: TIMESTAMP

    Usage notes:

    To find a date/time value in the future or the past relative to the current date and time, add or subtract an INTERVAL expression to the return value of NOW() . See TIMESTAMP Data Type for examples.

    To produce a TIMESTAMP representing the current date and time that can be shared or stored without interoperability problems due to time zone differences, use the TO_UTC_TIMESTAMP() function and specify the time zone of the server. When TIMESTAMP data is stored in UTC form, any application that queries those values can convert them to the appropriate local time zone by calling the inverse function, FROM_UTC_TIMESTAMP() .

    To determine the time zone of the server you are connected to, in Impala 2.3 and higher you can call the timeofday() function, which includes the time zone specifier in its return value. Remember that with cloud computing, the server you interact with might be in a different time zone than you are, or different sessions might connect to servers in different time zones, or a cluster might include servers in more than one time zone.

    Any references to the NOW() function are evaluated at the start of a query. All calls to NOW() within the same query return the same value, and the value does not depend on how long the query takes.

    QUARTER(TIMESTAMP / DATE date) Purpose: Returns the quarter in the input date argument as an integer value, 1, 2, 3, or 4, where 1 represents January 1 through March 31.

    نوع الإرجاع: INT

    SECOND(TIMESTAMP date) Purpose: Returns the second field from a TIMESTAMP value.

    نوع الإرجاع: INT

    SECONDS_ADD(TIMESTAMP date, INT seconds), SECONDS_ADD(TIMESTAMP date, BIGINT seconds) Purpose: Returns the specified date and time plus some number of seconds.

    نوع الإرجاع: TIMESTAMP

    SECONDS_SUB(TIMESTAMP date, INT seconds), SECONDS_SUB(TIMESTAMP date, BIGINT seconds) Purpose: Returns the specified date and time minus some number of seconds.

    نوع الإرجاع: TIMESTAMP

    SUBDATE(TIMESTAMP / DATE date, INT / BIGINT days) Purpose: Subtracts days from date and returns the new date value.

    The days value can be negative, which gives the same result as the ADDDATE() function.

    نوع الإرجاع: STRING

    Added in: Impala 2.3.0

    Usage notes: The result value represents similar information as the now() function, only as a STRING type and with somewhat different formatting. For example, the day of the week and the time zone identifier are included. This function is intended primarily for compatibility with SQL code from other systems that also have a timeofday() function. Prefer to use now() if practical for any new Impala code.

    If the first argument represents a later point in time than the second argument, the result is 1.

    If the first argument represents an earlier point in time than the second argument, the result is -1.

    If the first and second arguments represent identical points in time, the result is 0.

    If either argument is NULL , the result is NULL .

    نوع الإرجاع: INT (either -1, 0, 1, or NULL )

    Added in: Impala 2.3.0

    Usage notes:

    Usage notes: A comparison function for TIMESTAMP values that only tests whether the date and time increases, decreases, or stays the same. Similar to the SIGN() function for numeric values.

    TO_DATE(TIMESTAMP ts) Purpose: Returns a string representation of the date field from the ts argument.

    نوع الإرجاع: STRING

    TO_TIMESTAMP(BIGINT unixtime), TO_TIMESTAMP(STRING date, STRING pattern) Purpose: Converts an integer or string representing a date/time value into the corresponding TIMESTAMP value.

    نوع الإرجاع: TIMESTAMP

    Added in: Impala 2.3.0

    Usage notes:

    An integer argument represents the number of seconds past the epoch (midnight on January 1, 1970). It is the converse of the UNIX_TIMESTAMP() function, which produces a BIGINT representing the number of seconds past the epoch.

    A string argument, plus another string argument representing the pattern, turns an arbitrary string representation of a date and time into a true TIMESTAMP value. The ability to parse many kinds of date and time formats allows you to deal with temporal data from diverse sources, and if desired to convert to efficient TIMESTAMP values during your ETL process. Using TIMESTAMP directly in queries and expressions lets you perform date and time calculations without the overhead of extra function calls and conversions each time you reference the applicable columns.

    The following examples demonstrate how to convert an arbitrary string representation to TIMESTAMP based on a pattern string:

    The following examples show how to convert a BIGINT representing seconds past epoch into a TIMESTAMP value:

    TO_UTC_TIMESTAMP(TIMESTAMP ts, STRING timezone) Purpose: Converts a specified timestamp value in a specified time zone into the corresponding value for the UTC time zone.

    نوع الإرجاع: TIMESTAMP

    Usage notes:

    Often used in combination with the now() function, to translate local date and time values to the UTC time zone for consistent representation on disk. The opposite of the FROM_UTC_TIMESTAMP() function.

    See discussion of time zones in TIMESTAMP Data Type for information about using this function for conversions between the local time zone and UTC.

    The simplest use of this function is to turn a local date/time value to one with the standardized UTC time zone. Because the time zone specifier is not saved as part of the Impala TIMESTAMP value, all applications that refer to such data must agree in advance which time zone the values represent. If different parts of the ETL cycle, or different instances of the application, occur in different time zones, the ideal reference point is to convert all TIMESTAMP values to UTC for storage.

    Once a value is converted to the UTC time zone by TO_UTC_TIMESTAMP() , it can be converted back to the local time zone with FROM_UTC_TIMESTAMP() . You can combine these functions using different time zone identifiers to convert a TIMESTAMP between any two time zones. This example starts with a TIMESTAMP value representing Pacific Daylight Time, converts it to UTC, and converts it to the equivalent value in Eastern Daylight Time.

    TRUNC(TIMESTAMP / DATE ts, STRING unit) Purpose: Returns the ts truncated to the unit specified.

    Argument: The unit argument is not case-sensitive. This argument string can be one of:


    5 Answers 5

    I checked your profile and saw that you are in the UK. If your sql server is set to use the dateformat dmy then that explains your issue. Without using the 'T' instead of the space in the datetime string, Sql Server won't recognize it as ISO8601 format.

    Querying using dates and/or datetimes can be tricky, to make sure you are getting what you are looking for I recommend reading:

    edit: to clarify the out of range value in your error message would be from interpreting the month as 30 and the day as 11.

    I do not understand why the data is being converted from varchar to datetime when 'Created' is set to datetime

    The literals you are providing for comparison to the Created column are strings. To compare those literals with the datetime column, SQL Server attempts to convert the strings to datetime types, according to the rules of data type precedence. Without explicit information about the format of the strings, SQL Server follows its convoluted rules for interpreting strings as datetimes.

    In my view, the neatest way to avoid these types of issues is to be explicit about types. SQL Server provides the CAST and CONVERT functions for this purpose. When working with strings and date/time types, CONVERT is to be preferred because it provides a style parameter to explicitly define the string format.

    The question uses strings in ODBC canonical (with milliseconds) format (style 121). Being explicit about the data type and string style results in the following:

    That said, there are good reasons (as Aaron points out in his answer) to use a half-open range instead of BETWEEN (I use style 120 below just for variety):

    Being explicit about types is a very good habit to get into, particularly when dealing with dates and times.