PDA

View Full Version : معادل select datepart(WW,GETDATE()) در تاريخ شمسي چيست؟



aminpourazadeh
پنج شنبه 05 تیر 1393, 09:35 صبح
معادل
select datepart(WW,GETDATE())



در تاريخ شمسي چيست؟

SayeyeZohor
پنج شنبه 05 تیر 1393, 17:57 عصر
مقصودتون واضح نیست

aminpourazadeh
یک شنبه 08 تیر 1393, 06:32 صبح
اين تابع با ميلادي جواب ميده
من شمسي مي خوام

SayeyeZohor
یک شنبه 08 تیر 1393, 21:17 عصر
ببین عزیز توضیح ات کامل نیست

شما باید اول بگی فرمت دخیره سازی تاریخ ات چطوریه ؟ مثلاً "1392/02/02" با "92/02/02" یا ...

بعد DataType فیلد ات از چه نوعی هستش DateTime یا Date یا VarChar ?

Getdate این رو برمی گردونه "2014-06-29 21:52:49.473"

شما قصدت رو بگو

شاید اگه توضیح ات رو کامل کنی بهتر باشه

SayeyeZohor
یک شنبه 08 تیر 1393, 21:32 عصر
شما می خوای ببینی هفته چندم سالی ؟

SayeyeZohor
یک شنبه 08 تیر 1393, 23:48 عصر
دوست عزیز این فانکشن رو نوشتم ببین درست جواب میده ؟

.: مبتدی :. :بامزه:




USE [master]
GO


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


CREATE FUNCTION [dbo].[ShamsiDatePart] (@Date varchar(10)) RETURNS BigInt
AS
BEGIN
DECLARE @Year VarChar(5)
DECLARE @Month VarChar(5)
DECLARE @Day VarChar(5)
DECLARE @SumDay BigInt


DECLARE @X BigInt


-- Quote from You-See --
SET @Year = SUBSTRING(@Date, 1, CHARINDEX('/', @Date)-1)
SET @Date = SUBSTRING(@Date, CHARINDEX('/', @Date)+1, LEN(@Date))
SET @Month = SUBSTRING(@Date, 1, CHARINDEX('/', @Date)-1)
SET @Day = SUBSTRING(@Date, CHARINDEX('/', @Date)+1, LEN(@Date))
-- Quote from You-See --


SET @SumDay =
CASE @Month
WHEN '01' THEN 31*0
WHEN '02' THEN 31*1
WHEN '03' THEN 31*2
WHEN '04' THEN 31*3
WHEN '05' THEN 31*4
WHEN '06' THEN 31*5

WHEN '07' THEN 31*6 + 30*0
WHEN '08' THEN 31*6 + 30*1
WHEN '09' THEN 31*6 + 30*2
WHEN '10' THEN 31*6 + 30*3
WHEN '11' THEN 31*6 + 30*4

WHEN '12' THEN 31*6 + 30*5 + 30*0
END


SET @X = (@SumDay+@Day) / 7 --@Year + ' ' + @Month + ' ' + @Day
RETURN @X
END
GO





مثال :


Select [master].[dbo].[ShamsiDatePart]('1393/08/08')

aminpourazadeh
پنج شنبه 19 تیر 1393, 16:38 عصر
خیلی ممنونم
جواب میده

aminpourazadeh
پنج شنبه 19 تیر 1393, 16:55 عصر
با
select (DATEDIFF(DD,dbo.ShamsiToMiladi('1393/01/01'),dbo.ShamsiToMiladi('1393/01/10'))/7)+1
هم جواب میده


دوست عزیز این فانکشن رو نوشتم ببین درست جواب میده ؟

.: مبتدی :. :بامزه:




USE [master]
GO


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


CREATE FUNCTION [dbo].[ShamsiDatePart] (@Date varchar(10)) RETURNS BigInt
AS
BEGIN
DECLARE @Year VarChar(5)
DECLARE @Month VarChar(5)
DECLARE @Day VarChar(5)
DECLARE @SumDay BigInt


DECLARE @X BigInt


-- Quote from You-See --
SET @Year = SUBSTRING(@Date, 1, CHARINDEX('/', @Date)-1)
SET @Date = SUBSTRING(@Date, CHARINDEX('/', @Date)+1, LEN(@Date))
SET @Month = SUBSTRING(@Date, 1, CHARINDEX('/', @Date)-1)
SET @Day = SUBSTRING(@Date, CHARINDEX('/', @Date)+1, LEN(@Date))
-- Quote from You-See --


SET @SumDay =
CASE @Month
WHEN '01' THEN 31*0
WHEN '02' THEN 31*1
WHEN '03' THEN 31*2
WHEN '04' THEN 31*3
WHEN '05' THEN 31*4
WHEN '06' THEN 31*5

WHEN '07' THEN 31*6 + 30*0
WHEN '08' THEN 31*6 + 30*1
WHEN '09' THEN 31*6 + 30*2
WHEN '10' THEN 31*6 + 30*3
WHEN '11' THEN 31*6 + 30*4

WHEN '12' THEN 31*6 + 30*5 + 30*0
END


SET @X = (@SumDay+@Day) / 7 --@Year + ' ' + @Month + ' ' + @Day
RETURN @X
END
GO





مثال :


Select [master].[dbo].[ShamsiDatePart]('1393/08/08')