استعلام التاريخ مع السبات على عمود الطابع الزمني في postgresql

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

سؤال

يحتوي الجدول على عمود الطابع الزمني. يمكن أن تكون قيمة العينة في ذلك 2010-03-30 13:42:42. مع Hibernate ، أقوم بعمل قيود على استعلام النطاق.

رسم خرائط السبات لهذا العمود هو كما يلي.

<property name="orderTimestamp"  column="order_timestamp" type="java.util.Date" />

دعنا نقول ، أريد أن أعرف جميع السجلات التي لها تاريخ 30 مارس 2010 و 31 مارس 2010. يتم إجراء استعلام في هذا المجال على النحو التالي.

Date fromDate = new SimpleDateFormat("yyyy-MM-dd").parse("2010-03-30");
Date toDate = new SimpleDateFormat("yyyy-MM-dd").parse("2008-03-31");
Expression.between("orderTimestamp", fromDate, toDate);

هذا لا يعمل.

يتم تحويل الاستعلام إلى الطوابع الزمنية المعنية باسم "2010-03-30 00:00:00" و "2010-03-31 00:00:00". لذلك ، يتم تجاهل جميع السجلات في 31 مارس 2010.

قد يكون هناك حل بسيط لهذه المشكلة هو أن يكون تاريخ النهاية "2010-03-31 23:59:59." ولكن ، أود أن أعرف ما إذا كان هناك طريقة لمطابقة جزء التاريخ فقط من عمود الطابع الزمني.

أيضا ، هو Expression.between() بما في ذلك كلا الحدود؟ الوثائق لا تلقي أي ضوء على هذا.

لا يوجد حل صحيح

نصائح أخرى

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

إذا كنت لا تريد طابعًا زمنيًا ، فاستخدم تاريخًا (ولا ينبغي أن تستخدمه type="date"?).

أيضا ، هل التعبير.

يبدو أن سلوك SQL بين المشغل هو قاعدة البيانات المعتمدة. مع posgresql ، بين التعبير:

x BETWEEN y AND z

يعادل دلالة:

y <= x AND x <= z

أي شاملة.

"2010-03-31 23:59:59." من المحتمل أن تكون حالة الحدود خطيرة: إذا كانت هناك معاملة في النظام بين 23:59:59 و 00:00:00 ، فستفتقدها. إذا كان لديك ما يكفي من المعاملات يوميًا وفترة طويلة بما يكفي ، فسوف ينهار التقرير وسوف تقضي ساعات لمعرفة السبب.

postgresql between يشمل الحدود لذلك لن يكون من الآمن تعيين تاريخ الانتهاء على 2010-04-01 00:00:00. استخدم LT () و GT () للتأكد.

ربما يمكنك إلقاء OrderTimestamp إلى موعد. HQL لديه الدعم لهذا.

استخدم Cast (Your_data ، التاريخ) ، تذكر أن ARG الثاني لوظيفة الممثلين يجب أن يكون أقل ، أو لن يعمل.

ATT.: صموئيل مايكون

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