ورود

View Full Version : جدا نمودن تاريخ و زمان



mohsen_r
شنبه 23 خرداد 1388, 15:00 عصر
سلام
من ميخوام از بانك sql يك فيلد تاريخ را بخونم بوسيله تابع datepart ماه وسال و روز را جدا ميكنم مشكلي كه دارم چطور ميشه تو كوري روز يا ماه بصورت 01 باشه نه 1
لطفا راهنمايي

shervin farzin
شنبه 23 خرداد 1388, 17:03 عصر
سلام
كد SQL به اين صورت خواهد بود :

declare @date_tmp datetime
select @date_tmp = date_field from Table1 where ....
declare @a char(2)
declare @b int
set @b = cast(datepart(dd,@date_tmp) as int)
if @b < 10 set @a = '0'+cast(@b as char) else set @a = cast(@b as char)
select @a as 'Day'
موفق باشيد.

mohsen_r
یک شنبه 24 خرداد 1388, 08:17 صبح
سلام
كد SQL به اين صورت خواهد بود :

declare @date_tmp datetime
select @date_tmp = date_field from Table1 where ....
declare @a char(2)
declare @b int
set @b = cast(datepart(dd,@date_tmp) as int)
if @b < 10 set @a = '0'+cast(@b as char) else set @a = cast(@b as char)
select @a as 'Day'
موفق باشيد.

اما به نظر ميرسه اين كار تو كوئري مشكل باشه چون من از تاريخ همجا كوئري استفاده كردم تو having و select وgroupby
در ضمن من كل تاريخ را نياز دارم 2009/06/01 لطفا بيشتر راهنمائي كنيد

shervin farzin
یک شنبه 24 خرداد 1388, 09:25 صبح
سلام
پيش از استفاده از متغيير تاريخ در Select يا Having يا Groupby اين كد رو قرار بديد :

-- get date from table
declare @date_tmp datetime
select @date_tmp = date_Field from Table1 where some_condition
-- declare variables
declare @a varchar(10), @b int
-- define year
set @a = cast(datepart(yy,@date_tmp) as char(4))+'/'
-- define month
set @b=cast(datepart(mm,@date_tmp) as int)
if @b<10 set @a=@a+'0'+cast(@b as char(1))+'/' else set @a=@a+cast(@b as char(2))+'/'
-- define day
set @b = cast(datepart(dd,@date_tmp) as int)
if @b < 10 set @a = @a + '0' + cast(@b as char(1)) else set @a = @a + cast(@b as char(2))
--------------------------------------------------------------------------------------------------
select @a as 'Full Date'
در اين كد متغيير Date از جدول گرفته ميشه ، اگر شماره ماه يا روز يك رقمي باشه يه 0 به ابتداش
اضافه ميشه و نهايتا به فرمت YYYY / MM / DD در متغييري به نام a@ از نوع رشته اي ذخيره
ميشه . شما در ادامه كد هاي خودتون ( Having , Select , Groupby ) از متغيير a@ به عنوان
تاريخ بايد استفاده كنيد .
موفق باشيد .

mohsen_r
دوشنبه 25 خرداد 1388, 09:48 صبح
يك سوال ديگر آيا اين امكان وجود دارد كه من يك فيلد تاريخ و زمان را از هم كم كنم و اختلاف آن به صورت يك عدد (ثانيه) در كوئري به من بدهد

shervin farzin
دوشنبه 25 خرداد 1388, 11:26 صبح
سلام
فرض كنيم تاريخ اول در متغيير a@ و تاريخ دوم در متغيير b@ باشه . در اين صورت اختلاف اين دو
تاريخ بر اساس ثانيه از روش زير بدست مياد :

datediff(second,@b,@a)
توجه كنيد كه Second كلمه كليدي هست و شما ميتونيد به جاي اون از Year ، month ، day , ...
استفاده كنيد كه باعث ميشه تفاضل دو تاريخ رو بر اساس اون برگردونه .
موفق باشيد .