Hijri Shamsi の日付'92/2/3'を次の形式に変換したい: '92/02/03'
このコードでは、次のエラーが発生します: varchar データ型から datetime データ型への変換により、範囲外の値が発生しました。
Declare @Str Varchar(10) = '92/2/3'
Select Convert(Varchar(10), Convert(DateTime, @Str), 111)
日付の形式を変更するにはどうすればよいですか?
11
ではなく、 を使用する必要があります111
FROM を変換する形式を伝えるには、内部変換で 11 を使用する必要があります。
Declare @Str Varchar(10) = '92/2/3'
Select Convert(Varchar(10), Convert(DateTime, @Str,11), 11)
この関数を使用して、要求された形式でグレゴリオ暦の日付をイスラム暦 (シャムシ) の日付に変換します。
CREATE FUNCTION [dbo].[ShamsiDate]
(
@ChirsDate SMALLDATETIME
)
RETURNS CHAR(10)
AS
BEGIN
DECLARE @SolarDate CHAR(10)
DECLARE @Day CHAR(2)
DECLARE @Mon CHAR(2)
DECLARE @SDay INT
DECLARE @SMon INT
DECLARE @SYear INT
SET @SYear = dbo.ShamsiDatePart(@ChirsDate, 'Y')
SET @SMon = dbo.ShamsiDatePart(@ChirsDate, 'M')
SET @SDay = dbo.ShamsiDatePart(@ChirsDate, 'D')
IF @SMon <= 9
SELECT @Mon = '0' + CONVERT(CHAR(1), @SMon)
ELSE
SELECT @Mon = CONVERT(CHAR(2), @SMon)
IF @SDay <= 9
SELECT @Day = '0' + CONVERT(CHAR(1), @SDay)
ELSE
SELECT @Day = CONVERT(CHAR(2), @SDay)
SELECT @SolarDate = CONVERT(CHAR(4), @SYear) + '/' + @Mon + '/'
+ @Day
RETURN @SolarDate
END
CREATE FUNCTION [dbo].[ShamsiDatePart]
(
@MiDate DATETIME ,
@ADatePart CHAR
)
RETURNS INT
AS
BEGIN
DECLARE @TmpY INT ,
@Leap INT
DECLARE @Sh_Y INT ,
@Sh_M INT ,
@Sh_D INT ,
@Result INT
IF @MiDate IS NULL
RETURN 0
DECLARE @Result INT
SET @Result = CONVERT(INT, CONVERT(FLOAT, @MiDate))
IF @Result <= 78
BEGIN
SET @Sh_Y = 1278
SET @Sh_M = ( @Result + 10 ) / 30 + 10
SET @Sh_D = ( @Result + 10 ) % 30 + 1
END
ELSE
BEGIN
SET @Result = @Result - 78
SET @Sh_Y = 1279
WHILE 1 = 1
BEGIN
SET @TmpY = @Sh_Y + 11
SET @TmpY = @TmpY - ( @TmpY / 33 ) * 33
IF ( @TmpY <> 32 )
AND ( ( @TmpY / 4 ) * 4 = @TmpY )
SET @Leap = 1
ELSE
SET @Leap = 0
IF @Result <= ( 365 + @Leap )
BREAK
SET @Result = @Result - ( 365 + @Leap )
SET @Sh_Y = @Sh_Y + 1
END
IF @Result <= 31 * 6
BEGIN
SET @Sh_M = ( @Result - 1 ) / 31 + 1
SET @Sh_D = ( @Result - 1 ) % 31 + 1
END
ELSE
BEGIN
SET @Sh_M = ( ( @Result - 1 ) - 31 * 6 ) / 30 + 7
SET @Sh_D = ( ( @Result - 1 ) - 31 * 6 ) % 30 + 1
END
END
RETURN CASE @ADatePart WHEN 'Y' THEN @Sh_Y WHEN 'M' THEN @Sh_M WHEN 'D' THEN @Sh_D ELSE 0 END
END
SQL Server 2012 を使用している場合は、以下のソリューションを使用できます。
Declare @Str varchar(10) = '92/2/3'
Select Format(Convert(Date, @Str,11),'yy/MM/dd')
イムラン