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

تحويل كود فجول الى تي اس كيو ال

بدأه addsoso في 3 مايو 2012 · 11 رد · 1,106 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ارجو تحويل هذه الدالة من الفجول الى ال tsql وشكرا

Function Date360(FirstDate As Variant, SecondDate As Variant) As Variant

Select Case Day(FirstDate)

Case 31

FirstDay = 30

Case 28, 29

If Month(FirstDate) = 2 Then

FirstDay = 30

Else

FirstDay = Day(FirstDate)

End If

Case Else

FirstDay = Day(FirstDate)

End Select

Select Case Day(SecondDate)

Case 31

SecondDay = 30

Case 28, 29

If Month(SecondDate) = 2 Then

SecondDay = 30

Else

SecondDay = Day(SecondDate)

End If

Case Else

SecondDay = Day(SecondDate)

End Select

Date360 = ((DateDiff("m", FirstDate, SecondDate) - 1) * 30) + (30 - FirstDay) + SecondDay

End Function

1
#2

اكيد السؤال صعب ولكن ساعدوني حتى ولو جزء من هذه الدالة

#3

فكرة الطلب حلو . . . . ولكن على الرغم من ان الكود اللى انت طلبه غير مفهوم هدفة وعليه منى كثير من الاستفهام . . .؟؟؟؟؟؟

فكرة الكود بالـ Sql

Declare @FirstDate Datetime, @SecondDate Datetime
Declare @FirstDay Int,@SecondDay Int

IF Day(@FirstDate)=31  
	Set @FirstDay = 30
Else if Day(@FirstDate)=28 or  Day(@FirstDate)=29 begin
           If Month(@FirstDate) = 2 begin
               Set @FirstDay = 30
           End Else begin
               Set @FirstDay = Day(@FirstDate)
           End
End Else begin
	Set @FirstDay = Day(@FirstDate)
End


If Day(@SecondDate)=31 
	Set @SecondDay = 30
Else if Day(@SecondDate)=28 OR Day(@SecondDate)=29 begin
            If Month(@SecondDate) = 2 begin
                Set @SecondDay = 30
            End Else begin
                Set @SecondDay = Day(@SecondDate)
            End
end Else begin
	Set @SecondDay = Day(@SecondDate)
End

Select  ((DateDiff("m", @FirstDate, @SecondDate) - 1) * 30) + (30 - @FirstDay) + @SecondDay

والدالة بالـSql

CREATE FUNCTION test_function (@FirstDate Datetime, @SecondDate Datetime)
RETURNS int
AS
BEGIN
	Declare @sum Int,@FirstDay Int,@SecondDay Int

	IF Day(@FirstDate)=31  
		Set @FirstDay = 30
	Else if Day(@FirstDate)=28 or  Day(@FirstDate)=29 begin
	           If Month(@FirstDate) = 2 begin
	               Set @FirstDay = 30
	           End Else begin
	               Set @FirstDay = Day(@FirstDate)
	           End
	End Else begin
		Set @FirstDay = Day(@FirstDate)
	End


	If Day(@SecondDate)=31 
		Set @SecondDay = 30
	Else if Day(@SecondDate)=28 OR Day(@SecondDate)=29 begin
	            If Month(@SecondDate) = 2 begin
	                Set @SecondDay = 30
	            End Else begin
	                Set @SecondDay = Day(@SecondDate)
	            End
	end Else begin
		Set @SecondDay = Day(@SecondDate)
	End

	Select  @sum=((DateDiff("m", @FirstDate, @SecondDate) - 1) * 30) + (30 - @FirstDay) + @SecondDay

	RETURN @sum
END
1
#7
addsoso كتب:

اكيد السؤال صعب ولكن ساعدوني حتى ولو جزء من هذه الدالة

اولا شكرا جزيلا جزيلا على من ساعدني على سؤالي هذا

ثانيا هذه الدالة ترجع عدد الايام بين تاريخين استناد الى سنة التي فيها 360 يوم (كل شهر ينتهي ب 30 يوم) وهيا موجودة اصلا في الاكسل days360

#8
addsoso كتب:

اولا شكرا جزيلا جزيلا على من ساعدني على سؤالي هذا

ثانيا هذه الدالة ترجع عدد الايام بين تاريخين استناد الى سنة التي فيها 360 يوم (كل شهر ينتهي ب 30 يوم) وهيا موجودة اصلا في الاكسل days360

لا شكر على واجب انا اللى المفروض اشكرك على فكرة السوال . . .

لان اول خطوة فى احتراف البرمجة من رائى انى الواحد يقدر يكتب نفس الكود باكتر من لغة

#9

السلام عليكم

ارجو ان نحتفظ بمشاركات ثابت عن تحويل الكود من لغة البرمجة الى الـT-SQL انه مهما اختلفت اللغات وطريقة كتابة اكوادها فهي ستشترك عند تحويلها الى لغة تي_سيكوال

ومامن احد يطور برامج قواعد بيانات والا سيحتاج الى مثل هذه الاكواد في تطبيقاته

احييك بشدة اخي لهذه الفكرة الجميلة وارجوا ان تستمر فيها وكلنا سنستفيد منها باذن الله

جوزيتم

#10

اشكركم جدا على تفاعلكم بهذا الموضوع

طبعا هذه الفكره جاءت عندما كنت ابرمج قاعدة البيانات عن طريق الاكسس وكنت استخدم لغة ال vba لانشاء الدوال لما فيها مرونة بمعالجة البيانات

ولكن الاكسس غير فعال من ناحية ربطها على السرفر وعليه اخترت ان تكون الغة التالية tsql برنامج sqlserver 2008

والان كل مافي الامر ان احول كل الدالات التي هيا عل vba وتحول الي tsql

وأكرر شكري لكم.....والله الموفق

#11

يمكن استخدام DATEDIFF موجوده في السكول

#12

نعم ولكن DATEDIFF تعطي الفرق بين تاريخين وهي تعتمد على السنة التي تكون فيها عدد ايامها (365) بعكس دالة day360 تعتمد على دالة التي تكون فيها عدد ايامها (360)

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