我们可以通过传递日期名称来获得日期编号吗?

时间:2018-07-16 03:03:48

标签: sql sql-server sql-server-2008

是否可以在不进行硬编码的情况下从sql server中的日期名称获取星期几? 像这样的东西

select DatePart(xx, 'Monday') 
result: 1

4 个答案:

答案 0 :(得分:2)

您可以像这样获取日期对象的天数:

SELECT DATEPART(WEEKDAY, GETDATE())

“星期一”中没有足够的信息来让SQL推断日期;您只是在那时将文本转换为数字。但是,如果必须的话,至少要编写一个可以重用的函数:

CREATE FUNCTION dbo.DayNameToDayNumber(@DayName VARCHAR(10))
RETURNS SMALLINT
AS
BEGIN
    RETURN CASE @DayName
        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
        ELSE NULL
        END
END
GO

答案 1 :(得分:1)

有一个名为DAYOFWEEK的函数,该函数旨在返回与传递的日期相对应的天数。其格式为:

 select {fn DAYOFWEEK(getdate())}

答案 2 :(得分:0)

如果您正在寻找独立于DATEFIRST和语言的解决方案

; WITH 
week_day AS
(
    SELECT  date_part = datepart(weekday, datecol), date_name = datename(weekday, datecol)
    FROM    (
            VALUES 
            (GETDATE()),     (GETDATE() + 1), (GETDATE() + 2), 
            (GETDATE() + 3), (GETDATE() + 4), (GETDATE() + 5), (GETDATE() + 6)
        ) v (datecol)
)
SELECT  *
FROM    week_day
where   date_name   = 'Tuesday'

答案 3 :(得分:0)

我通过谷歌搜索找到了以下示例。

declare @m varchar 
set @m=0 
SELECT DATENAME(DW,CAST(@m AS INT))

How do you print the day name given a day number in SQL Server 2005 using SQL commands?