PDA

View Full Version : چه طوری یک ستون که تاریخ شمسی هست رو در یک ستون دیگه به صورت میلادی تبدیل کنم ؟



NasimBamdad
پنج شنبه 03 مرداد 1392, 18:21 عصر
سلام و خسته نباشید

یک ستون دارم که به صورت NvarChar می باشد و تاریخ شمسی در اون ذخیره کردم ، حالا می خوام یک ستون جدید اضافه کنم و معادل تاریخ میلادی این ستون شمسی رو به صورت نظیر به نظیر داشته باشم

آیا کدی چیزی براش هست ؟

مهدی هادیان2
پنج شنبه 03 مرداد 1392, 23:25 عصر
بسم الله الرحمن الرحیم
با سلام
تنها تاریخ میلادی رو ذخیره بفرمائید و تو برنامه هر جا نیاز داشتید معادل شمسی اون رو بدست بیارید.
موفق باشید.

NasimBamdad
جمعه 04 مرداد 1392, 14:49 عصر
USE [Nosakh]
GO
/****** Object: UserDefinedFunction [dbo].[ShamsiToMiladi] Script Date: 07/26/2013 15:26:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[ShamsiToMiladi](@FD nvarchar(10))
RETURNS smalldatetime AS
begin
Declare @syy bigint
Declare @smm bigint
Declare @sdd bigint
Declare @val bigint
Declare @By bigint
declare @mstart datetime
declare @Mc int

declare @sbase int
declare @sleapbmp nchar(150)
declare @ind as int



-- set @fd='1384/02/11'
set @mstart = '1900/03/21'

set @syy = substring(@FD,1,4)
set @smm = substring(@FD,6,2)
set @sdd = substring(@FD,9,2)
set @By = '1279'

set @sleapbmp='000010001000100010001000100010000100010 00100010001000100010001000010001000100010001000100 010001000010001000100010001000100010001'
set @sbase=475

-- print @smm

set @val = 0

While (@By < @syy)
begin

set @ind = (@By - @sbase) % (128 + 1)
if substring(@sleapbmp, @ind, 1) ='1'
Begin
set @val = @val + 1
end

set @val = @val + 365
set @By = @By + 1
end

set @Mc=1
while @mc< @smm

begin
Select @val =Case
When @Mc= 1 Then @Val+31
When @Mc= 2 Then @Val+31
When @Mc= 3 Then @Val+31
When @Mc= 4 Then @Val+31
When @Mc= 5 Then @Val+31
When @Mc= 6 Then @Val+31
When @Mc= 7 Then @Val+30
When @Mc= 8 Then @Val+30
When @Mc= 9 Then @Val+30
When @Mc= 10 Then @Val+30
When @Mc= 11 Then @Val+30
When @Mc= 12 Then @Val+29
end
set @mc=@mc+1
end
set @val = @val + @sdd
return DATEADD(day,@val,@mstart )
end


حالشو ببررید !