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

تحويل قيم سجلات من نوع الي أخر

مغلق
بدأه M.Hussein في 17 أغسطس 2006 · 11 رد · 881 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدي جدول به مجال من النوع

char(10)

,ومسجل به بعض البيانات وهي عباره عن ساعات ودقايق تم تمضيتها في العمل ولكن مكتوبة بصيغة عشرية

مثال : تم العمل اليوم 8.30 والمقصود هنا ثماني ساعات ونصف

هل يمكن تحويلها لصيغة عشرية Decimal

واذا اردت اجراء عملية حسابية (جمع - طرح - الخ)عليها ما هو السبيل لذلك

أرجو المساعده

#2

وضح اكثر.

#3

السلام عليكم ورحمة الله وبركاته :

شوف الكلام هذا أخي الكريم لأنه سيفيدك كثيراً : ;)

Declare @w char(5)
Set @w = '23,12'

Declare @h tinyint , @m tinyint

Select @h = cast( substring(@w , 0,charindex(',', @w )) AS TinyInt),
	   @m = cast( substring(@w , charindex(',', @w)+ 1,2) AS TinyInt)

print @h
print @m

يعني يمكن أن تكتب الكلام هذا في عبارة Select على النحو التالي :

Declare @sumH tinyint , @sumM tinyint

Select  @sumH = sum(   cast( substring(@w , 0 , charindex(',', TheTime)	  ) AS TinyInt)  ) ,
		  @sumM  = sum(   cast( substring(@w , charindex(',', TheTime)+ 1 , 2 ) AS TinyInt)  ) 
From YourTable

Select @sumH AS [Hours] , @sumM AS [Minutes]

شو رأيك :D ؟؟؟

تم تعديل هذه المشاركة بواسطة imadouzoun في 19 أغسطس 2006 في 10:46

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#4

يا عماد

الأخ يقول التحويل لأعداد عشرية وأنت معرف المتغيرات كلها tinyint؟

:D

ببساطة:

declare @my_var decimal(5,2)
declare @var='5.2'

set @my_var=convert(decimal(5,2), @var)

select @my_var

حيث نوع المتغير my_var@ يخزن أعدادا بخانتين عشريتين.

تم تعديل هذه المشاركة بواسطة walcom في 19 أغسطس 2006 في 13:06

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

#5

الله يعطيك العافية يا أستاذ وليد :) :

بس الأخ يريد التحويل لتنفيذ عمليات جمع وطرح الوقت اللي مخزن على شكل نص على ما أعتقد ..

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

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

وبالتالي فالتحويل إلى الـ Decimal مباشرة سيعطي خطأ

والله ولي التوفيق :)

تم تعديل هذه المشاركة بواسطة imadouzoun في 19 أغسطس 2006 في 11:34

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#6

اللذي فهمته والله اعلم ان الاخ يقصد تحويل مثلا من القيمة 8.30 والتي تفهم 8 ساعات و 30 دقيقة(ثمانيه ساعات ونصف) الى صيغة عشرية اي تصبح 8.5 ساعة حتى يتمكن من جمعها واى اي عمليات اخرى عليها.

عليه يصبح ال StoredProcedure كالاتي:

CREATE PROCEDURE dbo.CONVERT2DECIMAL 
(
@ClockInterval CHAR(10)
)
AS

DECLARE @H DECIMAL(5,2)
DECLARE @M DECIMAL(5,2)

SET @H=CONVERT(DECIMAL(5,2),SUBSTRING(@ClockInterval,0,CHARINDEX('.',@ClockInterval)))
SET @M=CONVERT(DECIMAL(5,2),SUBSTRING(@ClockInterval,CHARINDEX('.',@ClockInterval)+1,LEN(@ClockInterval)))

DECLARE @DecimalInterval DECIMAL(5,2)
SET @DecimalInterval=@H+@M/60
SELECT @DecimalInterval

RETURN

تم تعديل هذه المشاركة بواسطة abd_albaset في 20 أغسطس 2006 في 10:45

#7

كيف يتم استخدام الـ Stored Procedure

والمشكله التي تواجهني في الحقيقة هي انه لدي جدول يتم تخزين عدد ساعات العمل لكل ايام الاسبوع وخصائص الجدول هذا كالاتي :

empnum as int

satreg as char (10)

satot as char (10)

sunreg as char (10)

sunot as char (10)

etc....

وعليه فيتم تسجيل ساعات العمل مثلا 8.30 و 1.15 و 2 و 4.45 علي انهم ساعات عمل مثلا

والمشكله التي تواجهني انني اريد حساب مجموع تلك الساعات لموظف معين و لدي كود فيجوال بيسك يقوم بذلك لكن سؤالي هل يمكن اجراء تلك العمليه من خلال الداتابيز نقسها سواء باستخدام query or stored procedure

وجزاكم الله الخير واعزكم

#8

السلام عليكم ورحمة الله :

أخي الكريم أنا عطيتك الإجابة التي تريدها إقرأ ردي السابق على سؤالك و ستستنتج ذلك :)

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#9

في المشاركة الرئيسية قلت:

اقتباس
مثال : تم العمل اليوم 8.30 والمقصود هنا ثماني ساعات ونصف

في مشاركتي السابقة كتبت Stored Procedure يحول من 8.30 اي ثماني ساعات ونصف الى 8.5 بال Decimal .

هل جربت ال Stored Procedure حتى تحكم عليه بانه يعمل بالصورة المطلوبة ام لا.

ما هو satreg و satot

ارجو منك الاجابة حتى يمكننا مساعدتك.

#10

اولا : - كيف يتم استخدام الـStored procedure

ثانيا : لأ اريد تحويلها الي رقم عشري ولكن اريد فص الساعات عن الدقائق ثم بعد ذلك اجمع الدقائق واقسمها علي 60 للحصول على الساعات المقابله والمتبقي يظل كما هو في الدقائق

ثالثا : هل لي من اجابة للسؤال الخاص بالكريستال ريبورت والمطروح في المنتدي

وشكرا

#11

السلام عليكم ورحمة الله وبركاته :

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

-- إنشاء جدول للوقت 
Use Tempdb
Go

Create Table TB(MyTime Char(5) )

-- قيم للإختبار

Insert TB(MyTime) Values('11,30')
Insert TB(MyTime) Values('1,20')
Insert TB(MyTime) Values('13,20')
Insert TB(MyTime) Values('20,53')
Insert TB(MyTime) Values('11,2')
Insert TB(MyTime) Values('2,30')

-- مشاهدة القيم
Select * from TB 

Go

-- الإجراء مع كيفية استدعائه
Create Procedure Calculate_Sum_Time

AS
  Declare @h int , @m int

  Select @h = Sum(cast( substring(MyTime , 0,charindex(',', MyTime )) AS Int)) ,
	   @m = Sum(cast( substring(MyTime , charindex(',', MyTime)+ 1,2) AS Int))
  From TB

  Set @h = @h + ( @m / 60)
  Set @m = @m % 60

  Select Cast( @h AS Varchar(20) ) + ':' + Cast( @m AS Varchar(20) )AS [مجموع الوقت]

Go

-- الإستدعاء
Calculate_Sum_Time

بالتوفيق :)

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#12

الاخ الكريم عماد

جزاك الله كل الخير وسوف اقوم بتجربة ماتفضلت باقتراحه وافيدك بالنتيجة

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

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

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

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

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

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