PDA

View Full Version : سوال: تاریخ شمسی در اس کیو سرور



khorsandreza
پنج شنبه 15 مرداد 1388, 19:06 عصر
سلام
من در گشت گذر در وب یگ فایل پیدا کردم که ظاهرا برای نمایش تاریخ شمسی است و بصورت پروسیجر بدون خطا اجرا میشه حالا نمی دانم جطوری از این پروسیجر استفاده کنم

در صورت امکان نحوه استفادش را در تریگر بفرمائید

khorsandreza
جمعه 16 مرداد 1388, 13:56 عصر
یعنی تا حالا کسی از پروسیجر در برنامه هاش استفاده نکرده؟:متفکر:

بهنام بهمنی
شنبه 17 مرداد 1388, 09:00 صبح
sp گفته شده را می تئانید به مانند یک جدول در ذستور select بکار ببرید , function زیر هم برای تبدیل تاریخ است که استفاده از آن هم راحت تر است:



set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


-- =============================================
-- Author: Behnam Bahmani
-- Create date: 2005/02/27
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[GregorianToShamsi] (@MDate DateTime)
RETURNS Varchar(10)
AS
BEGIN
DECLARE @SYear as Integer
DECLARE @SMonth as Integer
DECLARE @SDay as Integer
DECLARE @AllDays as float
DECLARE @ShiftDays as float
DECLARE @OneYear as float
DECLARE @LeftDays as float
DECLARE @YearDay as Integer
DECLARE @Farsi_Date as Varchar(100)
SET @MDate=@MDate-CONVERT(char,@MDate,114)
SET @ShiftDays=466699 +2
SET @OneYear= 365.24199

SET @SYear = 0
SET @SMonth = 0
SET @SDay = 0
SET @AllDays = CAst(@Mdate as Real)
SET @AllDays = @AllDays + @ShiftDays
SET @SYear = (@AllDays / @OneYear) --trunc
SET @LeftDays = @AllDays - @SYear * @OneYear
if (@LeftDays < 0.5)
begin
SET @SYear=@SYear+1
SET @LeftDays = @AllDays - @SYear * @OneYear
end;
SET @YearDay = @LeftDays --trunc
if (@LeftDays - @YearDay) >= 0.5
SET @YearDay=@YearDay+1
if ((@YearDay / 31) > 6 )
begin
SET @SMonth = 6
SET @YearDay=@YearDay-(6 * 31)
SET @SMonth= @SMonth+( @YearDay / 30)
if (@YearDay % 30) <> 0
SET @SMonth=@SMonth+1
SET @YearDay=@YearDay-((@SMonth - 7) * 30)
end
else
begin
SET @SMonth = @YearDay / 31
if (@YearDay % 31) <> 0
SET @SMonth=@SMonth+1
SET @YearDay=@YearDay-((@SMonth - 1) * 31)
end
SET @SDay = @YearDay
SET @SYear=@SYear+1
declare @mymonth as Nvarchar(5)
if (@SMonth<10)
begin
SET @mymonth='0'+CAST (@SMonth as VarChar(10))
end
else
SET @mymonth=CAST (@SMonth as VarChar(10))
declare @myday as Nvarchar(5)
if (@SDay<10)
begin
SET @myday='0'+CAST (@SDay as VarChar(10))
end
else
SET @myday=CAST (@SDay as VarChar(10))

SET @Farsi_Date = CAST (@SYear as VarChar(10)) + '/' + @mymonth + '/' + @myday
Return @Farsi_Date


END


نحوه استفاده


select dbo.GregoriantoShamsi('1388/02/02')

jimi67
شنبه 17 مرداد 1388, 09:39 صبح
من از این استفاده کردم جواب هم داده.
http://www.p2p.dotnetsource.com/default.aspx?g=posts&t=4675

khorsandreza
شنبه 17 مرداد 1388, 10:42 صبح
مجددا سلام
من در محیط اس کیو سرور تازه کار هستم البته با نسخه های قدیمی (ورژن 7) یه مدت کم کار کردم با Borland InerBase خیلی کار کردم یک فانکشنهای بصورت DLL براش با دلفی نوشتم حال میتوانم از ایم DLLها در اس کیو سرور هم استفاده بکنم چون توابع زیادی دارم

hobab-theme
شنبه 17 مرداد 1388, 16:34 عصر
فکر کنم بشه ( البته فکر کنم )
چون DLLها معمولاً برای استفاده تو زبانهای مختلف محدودیتی ندارن
به قول دوستی زبون نفهمن:لبخند:
البته دوست من بازم میگم شایدها:متعجب:

بهنام بهمنی
شنبه 17 مرداد 1388, 16:48 عصر
امکان دارد, اما همانطور که در لینک زیر گفته شده, در نسخه های آینده حذف خواهد شد
http://msdn.microsoft.com/en-us/library/ms164653.aspx

nejati_moh
پنج شنبه 22 مرداد 1388, 18:42 عصر
سلام مرسی ار مطلبت
من یه مشکل اساسی دارم و اون این هستش
من تو جدول یه سری تاریخ شمسی با فرمت متنی دارم و میخوام این تاریخ ها روبه تاریخ میلادی و با فرمت date تبدیل کنم.

مشکل اینه که تاریخ 1388/02/29 رو سیستم قبول نمیکنه چون ماه دوم میلادی 28 روز داره
بنابر این نمیتونم این تاریخ ها رو اول به فرمت تاریخ در بیارم و بعد تغییر بدم.
چکار باید بکنم؟
ممنون

بهنام بهمنی
شنبه 24 مرداد 1388, 08:50 صبح
شما نه تنها در فوریه (که به صورت معمول 28 روزه و در سالهاي کبیسه 29 روزه است و در هيچ حالتي با ارديبهشت ما نمي خواند)به مشکل بر خواهيد خورد, بلکه ماههاي ديگري هم همين مشکل را دارند, ابتدا بايد تاريخ را به میلادي تبديل وبعد آنرا ذخيره کنيد

nejati_moh
یک شنبه 08 شهریور 1388, 17:30 عصر
با تشکر از جوابت دویت عزیز مشکل اینه که چطوری فرمت متن رو به فرمت تاریخ تبدیل کنم
چون وقتی سال و ماه و روز رو از هم تفکیک می کنم نمی تونم اونها رو وارد متغییری کنک که با فرمت تاریخ تعریف کردم ممنون