مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

source

عضویت از 1395/11/13

فانکشن اس کیو ال برای تاریخ شمسی

  • شنبه 30 شهریور 1398
  • 23:44
تشکر میکنم

سلام

یه فانکشن اس کیو ال برای تاریخ شمسی می خوام.

ممنونم

پاسخ های این پرسش

تعداد پاسخ ها : 3 پاسخ
کاربر سایت

AmirGhasemi

عضویت از 1392/02/25

  • یکشنبه 31 شهریور 1398
  • 07:40

سلام

فانکشن تبدیل تاریخ میلادی به شمسی در SQL Server

CREATE FUNCTION [dbo].[SolarDate] ( @ADate DATETIME )
RETURNS VARCHAR(200)
AS
    BEGIN 
        DECLARE @BaseDate INT
        DECLARE @BaseYear INT
        DECLARE @LongYearFlag BIT
        DECLARE @TotalDay INT
        DECLARE @PastYears INT
        DECLARE @LongYearCounter FLOAT
        DECLARE @RemindDays INT
        DECLARE @FYear INT
        DECLARE @FMonth INT
        DECLARE @FDay INT
        DECLARE @FStrYear VARCHAR(4)
        DECLARE @FStrMonth VARCHAR(2)
        DECLARE @FStrDay VARCHAR(2)

        SET @BaseDate = -11243
        SET @BaseYear = 1248
        SET @TotalDay = FLOOR(CONVERT(FLOAT, @ADate) - @BaseDate)  
        SET @PastYears = @TotalDay / 365
        SET @LongYearCounter = 4.1290322580645161290322580645161
        SET @RemindDays = ( @TotalDay % 365 ) - FLOOR(( @PastYears + 0.9 )
                                                      / @LongYearCounter)
        SET @FYear = @PastYears + @BaseYear
  
        IF @RemindDays < 0
            BEGIN
                IF ( ( ( @PastYears + 0.9 ) / @LongYearCounter )
                     - FLOOR(( @PastYears + 0.9 ) / @LongYearCounter) ) <= 0.25
                    SET @LongYearFlag = 1
                ELSE
                    SET @LongYearFlag = 0

                IF @LongYearFlag = 1
                    BEGIN
                        SET @RemindDays = @RemindDays + 366
                        SET @FYear = @FYear - 1
                    END
                ELSE
                    BEGIN
                        SET @RemindDays = @RemindDays + 365
                        SET @FYear = @FYear - 1
                    END 
            END

        IF @RemindDays <= 186
            BEGIN
                SET @FMonth = ( @RemindDays / 31 ) + 1
                SET @FDay = ( @RemindDays % 31 ) + 1
            END
        ELSE
            BEGIN
                SET @RemindDays = @RemindDays - 186 
                SET @FMonth = ( @RemindDays / 30 ) + 7
                SET @FDay = ( @RemindDays % 30 ) + 1
            END

        SET @FStrYear = CONVERT(VARCHAR(4), @FYear)
        SET @FStrMonth = CONVERT(VARCHAR(2), @FMonth)
        SET @FStrDay = CONVERT(VARCHAR(2), @FDay)

        IF LEN(@FStrMonth) < 2
            SET @FStrMonth = '0' + @FStrMonth

        IF LEN(@FStrDay) < 2
            SET @FStrDay = '0' + @FStrDay

        RETURN @FStrYear + '/' + @FStrMonth + '/' + @FStrDay
    END

کاربر سایت

source

عضویت از 1395/11/13

  • یکشنبه 31 شهریور 1398
  • 11:45

مرسی

کاربر سایت

source

عضویت از 1395/11/13

  • یکشنبه 31 شهریور 1398
  • 13:20

فقط یه مطلبی

چطور این رو به عنوان دیفالت ولیو هر فیلدی که میخوام استفاده کنم؟

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)