طريقة للحصول على التاريخ دون الوقت من خلال الـ SQL !!

هذا التابع وظيفته هو الحصول على التاريخ فقط دون الوقت (قيمة الوقت أصفار 00:00:00)

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

فمثلا لو أن لدي جدول للمستعيرين، وأردت الحصول على تقرير بأسماء جميع المستعيرين اللذين انتهت مدة اعارتهم ولنفرض أن التاريخ الكامل الآن من خلال التابع (الدالة) ()GetDate هي:

Select GetDate();

ليكن الناتج:

2007-06-21 12:26:24.807

 

ولنفرض أن لدي مستعير مسجل في الجدول تنتهي فترة إعارته في:

2007-06-21 12:35:24.807

لاحظ الفرق هو دقائق معدودة فقط فإن ناتج الاستعلام الناتج عند مقارنة حقل تاريخ انتهاء الإعارة مع التابع GetDate() لن يظهر هذا المستعير (أعود و أذكر بأن الوقت لا يهمني وإنما يهمني فقط التاريخ)، فلحل هذه المشكلة تستخدم التابع التالي:

GetDateOnly(DateTime @DateTime);

وهو على الشكل التالي:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
— =============================================
— Author:        Abdulkarim Kanaan
— Create date:   4/6/2007
— Description:   للحصول على التاريخ فقط دون الوقت
— =============================================
CREATE FUNCTION [dbo].[GetDateOnly]
(
      — Add the parameters for the function here 
      @DateTime DateTime
)
RETURNS smalldatetime
AS
BEGIN
      — Declare the return variable here
      DECLARE @Result smalldatetime

      Select @DateTime = DateAdd(hh, DatePart(hh, @DateTime), @DateTime);
      Select @DateTime = DateAdd(mi, DatePart(mi, @DateTime), @DateTime);
      Select @DateTime = DateAdd(ss, DatePart(ss, @DateTime), @DateTime);
      Select @DateTime = DateAdd(ms, DatePart(ms, @DateTime), @DateTime);

      — Add the T-SQL statements to compute the return value here

      Select @Result = @DateTime

      — Return the result of the function
      RETURN @Result 
END

 

 

 

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

 

 

 

Advertisements
Post a comment or leave a trackback: Trackback URL.

تعليقات

  • alnabhani  On 6 فبراير 2009 at 11:52 ص

    فكرة جميلة منك ، والاجمل انها تعتمد على تابع في قاعدة البيانات وليس لغة البرمجة C# ليكون افضل واسرع

    دائما تتحفنا

    بارك الله فيك

  • عبد الكريم كنعان  On 7 فبراير 2009 at 2:20 م

    شكرا على مرورك أخي النبهاني,,

  • علي  On 23 سبتمبر 2010 at 7:57 ص

    السلام عليكم اخي العزيز

    اني قمت بادراج التاريخ باستخدام دالة قمت باضافتها عند انشاء الجدول اي التاريخ يدخل الى قاعدة البيانات اوتوماتيك
    كيف استطيع ان اعمل مقارنة تاريخ في برنامج الاكسس او برنامج visual studio 2005 باستخدام لغة C# vb.net

    مع الشكر والتقدير

  • علي  On 23 سبتمبر 2010 at 8:09 ص

    السلام عليكم اخي العزيز

    اني قمت بادراج التاريخ باستخدام دالة قمت باضافتها عند انشاء الجدول في نافذة برنامج sql اي التاريخ يدخل الى قاعدة البيانات اوتوماتيك .
    كيف استطيع ان اعمل مقارنة تاريخ في برنامج الاكسس او برنامج visual studio 2005 باستخدام لغة C# vb.net مع حقل التاريخ في الجدول

    مع الشكر والتقدير

  • عبد الكريم كنعان  On 9 أكتوبر 2010 at 12:54 ص

    يمكنك عمل مقارنه داخل لغة C# او VB باستخدام الصف الستاتيكي DateTime حيث انه يحتوي على العديد من التوابع التي تمكنك من إجراء عمليات الحسابية على التاريخ وبذلك تستطيع اجراء عمليات المقارنه

    إذا لم تكن الاجابة كافية فيرجى أن تخبرنا بذلك

    وشكرا,,

  • محمد المعضادي  On 3 سبتمبر 2012 at 11:03 ص

    طيب اخي الكريم كيف تتم المقارنة من خلال برنامج الفيجوال على الدوت نت …. عند البحث

  • عبد الكريم كنعان  On 28 ديسمبر 2012 at 8:30 م

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

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   /  تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   /  تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   /  تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   /  تغيير )

w

Connecting to %s

%d مدونون معجبون بهذه: