الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الحصول على التاريخ فقط من بيانات من نوع DateTime

مغلق
بدأه عبد الكريم كنعان في 21 يونيو 2007 · 6 رد · 916 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

هذا التابع وظيفته هو الحصول على التاريخ فقط دون الوقت (قيمة الوقت أصفار 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

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

تم تعديل هذه المشاركة بواسطة عبد الكريم كنعان في 21 يونيو 2007 في 13:45

#2

فكرة رائعة لكنها طويلة قليلا واقترح عليك تجريب مايلي :

print  convert(datetime,convert(varcahr(10),getate())

او اذا اردت ان تقارن حقل مع تاريخ معين اضف يوم الى هذا التاريخ واستخدم اشارة الاقل

select * from sometable where somdate  <  dateadd(day,1,Getdate())

وعذرا ان وجد خطأ فلم اجرب هذا الكود لكن ارجو ان الفكرة قد تكون وصلت

#4
TareqVB كتب:
او اذا اردت ان تقارن حقل مع تاريخ معين اضف يوم الى هذا التاريخ واستخدم اشارة الاقل

select * from sometable where somdate  <  dateadd(day,1,Getdate())

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

وشكرا،،

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

وشكرا،،

لا، انظر

مشكلة مع التاريخ

مقارنة التاريخ

فكر بطريقة أخرى

#6
اقتباس
ولكن أعتقد في هذه التعليمة ممكن أحصل على مستعيرين تنتهي مدة إعارتهم بعد يوم واحد من تاريخ التقرير (أي سيكون التقرير فيه شيء من الخطأ)

لا هذا لن يحصل لاننا استخدمنا اشارة الاقل وليس اقل او يساوي وبامكانك اختبارها والتأكد من صحتها

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…