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

كود SQL

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

السلام وعليكم

اريد كود SQL يعمل التالي

لدي جدول الموضفين

ولكل موضف رصيد للاجازات على شكل التالي

days=10

hours=13

minutes=124

 اريد كود يضيف كل 60 دقيقة الى الساعات وايضا الساعات الى الايام مع العلم بان اليوم يحدده المستخدم مثلا اليوم يساوي 7:30 اي 450 دقيقة وليس 24 ساعة 

فيكون الناتج كالتالي

days=12

hours=0

minutes=4

والف شكر مقدما (اريد الكود فقط ب SQL)

#2

جرب هذا الكود مجرد فكرة

declare @nDays bigint=10
declare @nHours bigint=13
declare @nMinutes bigint=124

declare @nDayEqualMinutes bigint=450

declare @nTmp bigint=0

set @nTmp =@nMinutes/60
set @nMinutes =@nMinutes-(60*@nTmp)

set @nHours=@nHours+@nTmp 
------------------------------------------
set @nTmp=0

set @nTmp =(@nHours*60)/@nDayEqualMinutes --get Minutes in Hours
set @nHours=@nHours-((@nDayEqualMinutes*@nTmp)/60)

set @nDays=@nDays+@nTmp 
-----------------------------------------
select @nDays,@nHours,@nMinutes
1
#3
KARIMSOFT كتب:

 

جرب هذا الكود مجرد فكرة

declare @nDays bigint=10
declare @nHours bigint=13
declare @nMinutes bigint=124

declare @nDayEqualMinutes bigint=450

declare @nTmp bigint=0

set @nTmp =@nMinutes/60
set @nMinutes =@nMinutes-(60*@nTmp)

set @nHours=@nHours+@nTmp 
------------------------------------------
set @nTmp=0

set @nTmp =(@nHours*60)/@nDayEqualMinutes --get Minutes in Hours
set @nHours=@nHours-((@nDayEqualMinutes*@nTmp)/60)

set @nDays=@nDays+@nTmp 
-----------------------------------------
select @nDays,@nHours,@nMinutes

الف شكر ولكن هناك خطا واحد فقط مثلا

لو

set @nDays =0

set @nHours =0

set @nMinutes =479

الناتج 0:7:59

والصحيح 1:0:29

 

وايضا

لو

set @nDays =0

set @nHours =0

set @nMinutes =480

الناتج 1:1:0

والصحيح 1:0:30

day:hour:min

 

والحل الصحيح يجب ان يكون ب استخراج الوقت بلدقائق وتقسيم الدقائق على 450 لاستخراج الايام وتقسيم الباقي على 60 لاستخراج الساعات والباقي الاخير يكون الدقائق

 

ساكتب الكود ب c#

int Days = 0;
int Hours = 0;
int Min = 480;
int TotslMin = (Days * 450) + (Hours * 60) + Min;

int NewDays;
int NewHours;
int NewMin;

NewDays = TotslMin / 450;
TotslMin = TotslMin % 450;

NewHours = TotslMin / 60;
TotslMin = TotslMin % 60;

NewMin = TotslMin;

Console.WriteLine("days=" + NewDays.ToString() + " Hours=" + NewHours.ToString() + " Min=" + NewMin.ToString());

//out
//days=1 Hours=0 Min=30
//Press any key to continue . . .

فقط حوله الى استعلام واكون ممتنا لك واعذرني على ضعفي في ال SQL إن شاء الله سادرسها جيدا

واكرر الف شكر يا اخي

KARIMSOFT

تم تعديل هذه المشاركة بواسطة zaraki_kenpache في 10 نوفمبر 2013 في 02:59

#4

try this

declare  @Days int= 0
declare  @Hours int= 0
declare  @Min int= 480
declare  @TotslMin int= (@Days * 450) + (@Hours * 60) + @Min

declare  @NewDays INT
declare  @NewHours INT
declare  @NewMin INT

@NewDays = @TotslMin / 450
@TotslMin = @TotslMin % 450

@NewHours = @TotslMin / 60
@TotslMin = @TotslMin % 60

@NewMin = @TotslMin

select @NewDays as "days", @NewHours AS "Hours" , @NewMin as "Min"

تم تعديل هذه المشاركة بواسطة KARIMSOFT في 11 نوفمبر 2013 في 00:13

#5
KARIMSOFT كتب:

 

try this

declare  @Days int= 0
declare  @Hours int= 0
declare  @Min int= 480
declare  @TotslMin int= (@Days * 450) + (@Hours * 60) + @Min

declare  @NewDays INT
declare  @NewHours INT
declare  @NewMin INT

@NewDays = @TotslMin / 450
@TotslMin = @TotslMin % 450

@NewHours = @TotslMin / 60
@TotslMin = @TotslMin % 60

@NewMin = @TotslMin

select @NewDays as "days", @NewHours AS "Hours" , @NewMin as "Min"

and now i need this code work in my all rows in my tabel

Table1

id

Days

Hours

Mins

 

what i use update or while

u now i not good i Sql

#6

ممكن تشرح فكره العمل في البرنامج قبل االشرح علي العموم ضع هذا الكود في stored procedure واسل القيم له جرب هذا الاجراء

CREATE PROCEDURE spSetData
	@ID  int,
	@MinAdd int
AS 

declare  @Days int= 0
declare  @Hours int= 0
declare  @Mins int= 0

declare  @UpdateRow int= 0
-------------------------------------------------------------
select 
	@UpdateRow=count(id) ,
	@Days=isnull(max(Days),0),
	@Hours=isnull(max(Hours),0),
	@Mins=isnull(max(Mins),0) 
from 
	table 
where 	
	id=@id
-------------------------------------------------------------
declare  @TotslMin int= (@Days * 450) + (@Hours * 60) + @Min+@MinAdd

declare  @NewDays INT= @TotslMin / 450
declare  @NewHours INT
declare  @NewMin INT

@TotslMin = @TotslMin % 450

@NewHours = @TotslMin / 60
@TotslMin = @TotslMin % 60

@NewMin = @TotslMin
-------------------------------------------------------------
if @UpdateRow=0
	insert into table (id,Days,Hours,Mins) values (@id,@NewDays,@NewHours,@NewMin )
else
	update table set days=@NewDays, hours=@NewHours ,mins=@NewMin where id=@id
go

تم تعديل هذه المشاركة بواسطة KARIMSOFT في 11 نوفمبر 2013 في 23:28

#7

شكرا اخي

KARIMSOFT

اعلم ان الحل سيكون سهلل بقراة القيم في ال C# وبعدها نعدل عليها في الC#  ونعمل UPDATE للقييم ولكني احتاج الى هذا الكود في داخل السيرفر

وهذا الكود  يعمل جيدا ولكن هناك فقط نقص اخير انا لا اريد ان ارسل ال ID الى البروسيجر اريده ان يعمل update لجميع ال rows في الجدول و ال id  ربما غير مرتبة او لا تيدا من رقم معيين

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