sql - एक दिन के नाम को उसके पूर्णांक प्रतिनिधित्व में परिवर्तित करना



sql-server type-conversion (6)

दुर्भाग्य से वहाँ एक निर्मित फ़ंक्शन नहीं है, लेकिन आप अपनी स्वयं की इस तरह बना सकते हैं:


CREATE FUNCTION dbo.WeekDay(@DayOfWeek Varchar(9))
RETURNS INT
            AS
    BEGIN
    DECLARE @iDayofWeek INT
    SELECT @iDayofWeek = CASE @DayOfWeek
                    WHEN 'Sunday' THEN 1
                    WHEN 'Monday' THEN 2
                    WHEN 'Tuesday' THEN 3
                    WHEN 'Wednesday' THEN 4
                    WHEN 'Thursday' THEN 5
                    WHEN 'Friday' THEN 6
                    WHEN 'Saturday' THEN 7
        END
    RETURN (@iDayofWeek)
    END
GO

SQL सर्वर में आप DATENAME फ़ंक्शन का उपयोग स्ट्रिंग के रूप में सप्ताह के दिन प्राप्त करने के लिए कर सकते हैं

declare @date datetime
set @date = '12/16/08'
select datename(dw, @date)

जो "मंगलवार" देता है

और आप एक पूर्णांक के रूप में सप्ताह के दिन को प्राप्त करने के लिए DATEPART फ़ंक्शन का उपयोग कर सकते हैं

declare @date datetime
set @date = '12/16/08'
select datepart(dw, @date)

जो रिटर्न 3

लेकिन कहें कि मेरे पास एक शब्दवर्ण है जिसमें "मंगलवार" स्ट्रिंग है और मैं इसे 3 के पूर्णांक प्रतिनिधित्व में परिवर्तित करना चाहता हूं। ज़रूर, मैं बिना परेशानी के रूपांतरण को लिख सकता हूं, लेकिन मैं एक अंतर्निहित फ़ंक्शन । क्या ऐसा फ़ंक्शन मौजूद है?


Answer #1

फ़ंक्शन लिखने के बजाय, आपको विवरण और संख्यात्मक मान के साथ सप्ताह की तालिका का एक दिन बनाना चाहिए। तो आप संख्यात्मक प्राप्त करने के लिए बस तालिका में शामिल हो सकते हैं।

और यदि आपके पास कई तरह से दिन (एक वर्णबद्ध सिस्टम में होने की संभावना) को संग्रहित किया गया है, तो आप सभी वेरिएंट को तालिका में रख सकते हैं, इसलिए TUE, मंगल, मंगलवार सभी एक ही पूर्णांक में मैप करेंगे।


Answer #2

यह एक व्यावहारिक उद्देश्य की सेवा नहीं कर सकता है, लेकिन मैंने सोचा था कि मैं इसे मज़े के लिए समझता हूं। :) निम्नलिखित कार्यों

याद रखें कि DATEPART या DATENAME का उपयोग करते समय कि @@ DATEFIRST का महत्व महत्वपूर्ण है और आपके परिणामों को बदल सकता है। ऑनलाइन सहायता में SET DATEFIRST को देखें

DECLARE
    @date_name AS VARCHAR(20)

SET @date_name = 'Monday'

SELECT
    DATEPART(dw, my_date)
FROM
    (
    SELECT CAST('1900-01-01' AS DATETIME) AS my_date UNION
    SELECT CAST('1900-01-02' AS DATETIME) AS my_date UNION
    SELECT CAST('1900-01-03' AS DATETIME) AS my_date UNION
    SELECT CAST('1900-01-04' AS DATETIME) AS my_date UNION
    SELECT CAST('1900-01-05' AS DATETIME) AS my_date UNION
    SELECT CAST('1900-01-06' AS DATETIME) AS my_date UNION
    SELECT CAST('1900-01-07' AS DATETIME) AS my_date
    ) AS My_Dates
WHERE
    DATENAME(dw, my_date) = @date_name

Answer #3

अच्छी तरह से 6 साल बाद और SQL सर्वर के कई संस्करण लेकिन अभी भी ऐसा करने के लिए कोई अंतर्निहित फ़ंक्शन नहीं (जहां तक ​​मुझे पता है)। सुनिश्चित नहीं है कि SQL-Server-2014 कुछ ऐसा करने के लिए।

मैं @RussBradberry के लिए इसी तरह का दृष्टिकोण लिया है IF बयान के साथ ही किया है।

CREATE FUNCTION dbo.WeekDayInt (@DayOfWeekName VARCHAR(10))
RETURNS INT
AS
    BEGIN
        DECLARE @DayWeekNumber INT
        IF @DayOfWeekName = 'Sunday'    SET @DayWeekNumber = 1
        IF @DayOfWeekName = 'Monday'    SET @DayWeekNumber = 2
        IF @DayOfWeekName = 'Tuesday'   SET @DayWeekNumber = 3
        IF @DayOfWeekName = 'Wednesday' SET @DayWeekNumber = 4
        IF @DayOfWeekName = 'Thursday'  SET @DayWeekNumber = 5
        IF @DayOfWeekName = 'Friday'    SET @DayWeekNumber = 6
        IF @DayOfWeekName = 'Saturday'  SET @DayWeekNumber = 7;
        RETURN (@DayWeekNumber)
    END

या विकल्प के रूप में यह इस तरह किया जा सकता है, जो कि थोड़ा तेज हो सकता है क्योंकि यह मैच के रूप में जल्द ही मूल्य लौटाएगा और अन्य मूल्यों का मूल्यांकन करने की कोशिश नहीं करेगा।

CREATE FUNCTION dbo.WeekDayInt (@DayOfWeekName VARCHAR(10))
RETURNS INT
AS
    BEGIN
        IF @DayOfWeekName = 'Sunday'    RETURN 1
        IF @DayOfWeekName = 'Monday'    RETURN 2
        IF @DayOfWeekName = 'Tuesday'   RETURN 3
        IF @DayOfWeekName = 'Wednesday' RETURN 4
        IF @DayOfWeekName = 'Thursday'  RETURN 5
        IF @DayOfWeekName = 'Friday'    RETURN 6
        IF @DayOfWeekName = 'Saturday'  RETURN 7;
        RETURN 0;
    END

Answer #4

जहां DayID पूर्णांक मान 1 से 7 तक है।

DayID को कुछ आधार तिथि जैसे 1899-12-31 जोड़ें (यदि रविवार को सप्ताह का पहला दिन है तो 1899-12-30 की आरंभिक तारीख का उपयोग करें)

1 9 00-01-01 सोमवार, 1 9 00-01-02 मंगलवार था, और इसी तरह।

इस प्रकार:

select DayID, 
       datename( weekday, dateadd( day, DayID, '18991231' ) ) 

Answer #5

एसक्यूएल 2014 में, आप उपयोग कर सकते हैं:

चुनें DATEPART (DW, GetDate ()) यह पूर्णांक के रूप में सप्ताह के दिन वापस आ जाएगी।





type-conversion