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

كيفية ظهور العمر

بدأه خيال الشوق في 17 يونيو 2012 · 14 رد · 2,906 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لدي حقل تاريخ الميلاد وحقل اخر وهو العمر اريد عند ادخال تاريخ الميلاد يظهر لي العمر تلقائي في الحقل المخصصه له

المطوب التريجر الخاصة بالتاريخ وظهور العمر

#2

انظر الرابط

الرابط الخاص بي

#3

شكرا على الرد ولكن الرابط يظهر العكس بحيث يطلب مني العمر وهو يظهر التاريخ ولكن انا اريد ان ادخل التاريخ والعمر يظهر تلقائي

#4

أخوي أنا أفضل لك ان تستخدم دالة ( Datediff )

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

وقوانين النورمل تمنع وضع عمود لقيه تحسب من قيم اخرى مثل العمر او الرصيد وغيرها

طيب اتركك مع شرح الداله :


select datediff(yy,start date , End date)

تاريخ البداء سيكون حقل تاريخ الميلاد

وتاريخ النهائية سيكون ترايخ اليوم

لأن وضيفة هذه الداله هي طرح تاريخين ... تستقبل تاريخ بدايه وتاريخ ناهيه

لتكون الدالة بالشكل التالي :

select datediff(yy,'1991',getdate())

طبعا دالة getdate()

عباره عن داله وظيفتها عرض تاريخ اليوم ( طبعا حسب تاريخ الجهاز )

2
#5

طبعا إذا كنت مصر أو مطر على وضع عمود خاص بالعمر

فقط قم باستبدال أمر select إلى أمر insert

1
#6
DATEDIFF(year,'1980-04-03',GETDATE())
1
#7

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

اسم العمود الخاص بالعمر لدي في قاعدة البيانات هو : age

ياليت تكتب لي الجملة حتى اتمنكن من تطبيقها

#8

أخوي وش اسم الجدول عندك واسم حق تاريخ الميلاد حتى اكتب لك الكود كامل

على فكرة مثل ما قلت لك سابقا تقدر تتخلى عن عمود العمر ... لأنه مثل ما قلت لك قيمه يمكن استخراجها من قيم أخرى بمعنى عباره عن قيمه يمكن استخراجها من

تاريخ اليوم - عمود تاريخ الميلاد

وهذا الشي توفره لك دالة datediff

#9

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

اسم عمود العمر : age

اسم عمود تاريخ الميلاد : birthDate

اسم الجدول Employee

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

وجزاك الله الف خير

#10

أولا رح أشرح الطريقه الصحيحه للإستعلام عن العمر في التقارير ( من دون تحديد عمود للعمر )

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

فيه داله اسمها datediff

وظيفتها طرح بين تاريخين ( هي داله خاصة بالإستعلام عن العمر )

طيب طريقة استعمالها

select datediff(BartDate,StartDate , EndDate)

نقوم بتمرير لهذه الداله ثلاثه متغيرات

BartDAte : جزئ التاريخ المراد تطبيق عملية الطرح عليه مثل السنه أو الشهر ( نكتب year أو yy للسنة أو mm للشهر )

StartDate : تاريخ البدايه طبعا رح يكون تاريخ الميلاد .

EndDate : تاريخ النهايه ورح يكون تاريخ اليوم .. وبما ان SQL وفرت لنا داله تعطينا تاريخ اليوم وهي Getdate نضع في المتغير الثالث .

طيب نطبق الكود على جدولك :

SELECT DATEDIFF(year,Employee.birthDate,GETDATE()) as Age

جرب انسخ الكود السابق وطبقه منتضر النتيجه

طبعا انت رح تقوم بعمل storage prosager

تنفذ فيه الكود السايق كلما أردت تستعلم في التقارير عن العمر

أتمنى ان أكون أضحت لك بشكل سليم

اما طريقتك التي تخصص عمود للعمر:

أولا لازم تعرف حاجه أنك لازم تعمل عمليتين لإضافة العمر

اول شي تضع جميع البيانات في الجدول ما عدى العمر يكون فارغ

ثم بعد ذلك تقوم بإضافة العمر

لاننا إذا أردنا ان نستخدم الداله السابقة لازم يكون تاريخ الميلاد موجود مسبقا

وعند إضافة العمر نضع شرط أن اسم = ( اسم الشخص الذي تريد وضع عمره في الحقل ) او ID = ( ID الشخص الذي تريد وضع عمره في الحقل )

سيكون الكود كالتالي

INSERT INTO [testhassan].[dbo].Employee]
           (
           [age])
     VALUES
           (datediff(year,Employee.birthDate,getdate()))
where(id=1)

انصحك اخوي أن تبتعد عن عمل عمود خاص بالعمر ... لان مكلف جدا بالنسبة لقواعد البيانات .... طبعا إذا حطيت عمود للعمر انتبه تحط Data Type تبعه من نوع datetime حطه tinyint

إن شاء الله أكون وفيت وأفدتك في مشكلتك

تم تعديل هذه المشاركة بواسطة abo3li في 19 يونيو 2012 في 14:17

2
#11

ماقصرت والله

ولكن ان قصدي بعمود العمر ليكون للفرز اسهل لانه ابي استخدمه مع asp هذا هو المقصد واذا كنت ترى انه مو لازم ساقوم بحذفه وساقوم بتجربة الكود ولكن لو تسمح لي على هذا السوال الي ممكن يكون غريب

وين بالضبط اضع الكود هل اسوي يعني له تريجر والصقه او ما هي الطريقة الاصح

واسف على ازعاجك

ياليت تفهمني بالمقصد بعمود الخاص بالعمر اني لا اضع فيه اي شي مجرد اني ادخل تاريخ الميلاد في حقل التاريخ يظهر لي العمر مباشرة في عمود العمر

#12

هو Computed Column ولا ياثر في حجم قاعدة البيانات

#13

أخوي أنا فاهم قصدك من العمود الخاص بالعمر

لكن أحب أقولك إنه طريقه مو صحيحه

أي عمليه تبغى تسويه فرز ترتيب حسب العمر

تقدر تسويه من دون الحاجة لعمود خاص بالعمر

مثلا لو نبغى نسوي ترتيب الموظفين حسب العمر من اكبر إلى أصغر

يكون الكود كالتالي :

SELECT DATEDIFF(year,Employee.birthDate,GETDATE()) as Age
order by Age Desc

شرح الكود

أولا سوف نستعرض العمر عبر دالة datediff ( قد سبق وشرحتها طريقة عملها ) وسيقوم بوضع النتائج وهي العمر في عمود فقط سيتم إنشاؤة في run time وسنسميه Age وهذ العمليه قمنا به عبر الكود (as Age)

بعد ذلك سيكوم بالترتيب تنازلي حسب العمود الذي أنشئناه في الـ run time عبر أمر order by

وتقد تنفذ أي أومر أخرى دون الحاجة إلى عمود خاص بالعمر

اقتباس

هو Computed Column ولا ياثر في حجم قاعدة البيانات

أختلف معاك أخوي لأن عمود العمر سيكون قيمة ثابته fxed وتخيل معي أصغر قيمة تابته تحجز في الذاكرة 4 بايت هذه قيمه كبيرة جدا

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

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

مع وجود جماليه في التصميم إلى أنها سرعان ما تنهار بسبب التحليل والبناء الخطئ

أم أين تكتب الكود فهذا عند انت إم أنك تضع الكود مباشرة بعد أمر الإتصال بقاعدة البينات في commandText هذه الطريقه الغير محبذه

أو تقوم بإنشاء storage prosager ثم تستدعيه في commandText وهي الطريقه المفضلة لدي وهي الطريقه العلميه

اعتذ أخر عن أي قصور أتمنى لك التوفيق

1
#14

والله ماقصرت واشكرك على هذه الملاحظة المهمة وفعلا الطريقة الي انت شرحتها هي الصحيحة وانا طبقتها وفعلا هي في منتهى الجمالية من ناحية عمل الكود التخفيف على قاعدة البيانات

واكرر شكري وكل من شارك في هذا النقاش

#15

حياك الله أخوي

أنا في خدمتك في أي وقت

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