mysql - نادر الحادث عند تحديد تواريخ المدى في مكان الاستعلام من ميسكل؟




asp-classic odbc adodb (3)

إذا كنت تريد استخدام تنسيق التاريخ الافتراضي ليس ميسكل يجب تحويل بشكل صحيح

Select * from cdr where date(calldate)=str_to_date('20170901','%Y%m%d')

وإلا استخدام تنسيق الافتراضي ميسكل

Select * from cdr where date(calldate)='2017-09-01'

أنا برمجة أسب الكلاسيكية ضد قاعدة بيانات ميسكل الاتصال مع أدودب و ميسكل أودبك 5.3 أنسي سائق ولكن لدي بعض المشاكل عند تعيين التاريخ في مكان الاستعلام ميسكل بسيط عندما الاستعلام بلدي:

Select * from cdr where date(calldate)='20170901'

الاستعلام استرداد البيانات في صفحة أسب، ثاتس موافق، ولكن عندما يكون الاستعلام

Select * from cdr where date(calldate) between '20170801' and '20170828'

عند طباعة الاستعلام ثم نسخ من هتمل ولصق في منضدة ميسكل، ثم استرداد البيانات، ولكن عندما في صفحة أسب نفسها لا استرداد أي بيانات.

أيه أفكار؟ أعتقد ربما شيء مع دي أودبك سائق.


لن أثق بهذا الشكل: '20170801'

منذ calldate هو calldate ، وهذا سيكون أسرع:

    WHERE calldate >= '2017-08-01'
      AND calldate  < '2017-08-01' + INTERVAL 28 DAY`.

وسوف يتطلب INDEX(calldate)


يبدو لي أن CROSS APPLY يمكنه سد فجوة معينة عند العمل مع الحقول المحسوبة في الاستعلامات المعقدة / المتداخلة ، وجعلها أبسط وأكثر قابلية للقراءة.

مثال بسيط: لديك DoB وترغب في تقديم حقول متعددة مرتبطة بالعمر والتي ستعتمد أيضًا على مصادر بيانات أخرى (مثل التوظيف) ، مثل Age و AgeGroup و AgeAtHiring و MinimumRetirementDate وغيرها ، لاستخدامها في تطبيق المستخدم النهائي الخاص بك (Excel PivotTables ، على سبيل المثال).

الخيارات محدودة ونادراً ما تكون أنيقة:

  • لا يمكن تقديم استعلامات فرعية JOIN إدخال قيم جديدة في مجموعة البيانات استنادًا إلى البيانات الموجودة في طلب البحث الرئيسي (يجب أن تكون قائمة بذاتها).

  • UDFs مرتبة ، ولكنها بطيئة لأنها تميل إلى منع العمليات المتوازية. ويمكن أن يكون الكيان المنفصل شيئًا جيدًا (أقل رمزًا) أو سيئًا (أين هو الرمز).

  • جداول التقاطع. في بعض الأحيان ، يمكنهم العمل ، ولكن سرعان ما تنضمون إلى استعلامات فرعية بأطنان من UNION. فوضى كبيرة.

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

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

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

  • تكرار التعليمة البرمجية. ما هي أكبر قيمة من 3 بيانات طويلة (CASE ... ELSE ... END)؟ هذا سيكون قابل للقراءة!

    • أخبر عملاءك بحساب الأشياء اللعينة بأنفسهم.

هل اشتقت لشيء ما؟ ربما ، لذلك لا تتردد في التعليق. ولكن مهلا ، CROSS APPLY هو مثل هبة من السماء في مثل هذه الحالات: يمكنك فقط إضافة CROSS APPLY (select tbl.value + 1 as someFormula) as crossTbl بسيط CROSS APPLY (select tbl.value + 1 as someFormula) as crossTbl و voilà! أصبح الحقل الجديد جاهزًا للاستخدام عمليًا مثلما كان دائمًا موجودًا في بيانات المصدر الخاصة بك.

يمكن للقيم المقدمة عبر CROSS APPLY ...

  • يمكن استخدامها لإنشاء حقل واحد أو عدة حقول محسوبة بدون إضافة مشكلات في الأداء أو التعقيد أو سهولة القراءة إلى المزيج
  • مثل مع JOINs ، يمكن للعديد من عبارات CROSS APPLY اللاحقة الرجوع إلى نفسها: CROSS APPLY (select crossTbl.someFormula + 1 as someMoreFormula) as crossTbl2
  • يمكنك استخدام القيم المقدمة بواسطة تطبيق CROSS APPLY في شروط JOIN اللاحقة
  • كمكافأة ، هناك جانب وظيفة جدول القيمة

دانغ ، لا يوجد شيء لا يمكنهم فعله!





mysql sql asp-classic odbc adodb