在 SQLServer 中分别获取给定月份、日期和年份的周日名称

我试图得到一个日期,如星期五,星期六,星期日,星期一等从一个给定的日期。我知道有一个内置函数返回日期名称,例如:

SELECT DATENAME(dw,'09/23/2013') as theDayName

这个 SQL 查询返回:

星期一

这是所有的确定。但我想通过 Month, Day and Year个别。

我使用内建的 DATEPart 函数从一个日期中检索月、日和年,这样我就可以把它传递给 DATENAME 函数:

SELECT DATEPART(m, GETDATE()) as theMonth  -- returns 11
SELECT DATEPART(d, GETDATE()) as theDay   -- returns 20
SELECT DATEPART(yy, GETDATE()) as theYear   -- returns 2013

现在我有了单独的 Month,Day,Year 值,我把它传递给我的 DATENAME来得到我想要的日期的 Weekname:

--my SQL query to return dayName
SELECT (DATENAME(dw, DATEPART(m, GETDATE())/DATEPART(d, myDateCol1)/ DATEPART(yy, getdate())))  as myNameOfDay, FirstName, LastName FROM myTable

这将返回一个不正确的日期名称。我尝试用-替换/with-,这样在 DATENAME 函数中,我的 SQL 查询变成:

SELECT DATENAME(dw,'09/23/2013')
--becomes
SELECT DATENAME(dw,'09-23-2013')

但它仍然从 SQL 查询返回不正确的 dayName。

请指示。

443136 次浏览

您需要构造一个日期字符串。您正在使用 /-操作符,它们对 DATEPart 的数值返回值执行数学/数值操作。然后 DATENAME获取该数值并将其解释为日期。

你需要把它转换成一个字符串。例如:

SELECT (
DATENAME(dw,
CAST(DATEPART(m, GETDATE()) AS VARCHAR)
+ '/'
+ CAST(DATEPART(d, myDateCol1) AS VARCHAR)
+ '/'
+ CAST(DATEPART(yy, getdate()) AS VARCHAR))
)

如果您有 SQLServer2012:

如果日期部分是整数,那么可以使用 DATEFROMPARTS函数。

SELECT DATENAME( dw, DATEFROMPARTS( @Year, @Month, @Day ) )

如果日期部分是字符串,那么可以使用 CONCAT函数。

SELECT DATENAME( dw, CONVERT( date, CONCAT( @Day, '/' , @Month, '/', @Year ), 103 ) )

在 SQL2005和2008上进行了测试和工作。不确定是否可以在2012和更高版本中使用。

解决方案使用 DATENAME 而不是 DATEPART

select datename(dw,getdate()) --Thursday
select datepart(dw,getdate()) --2

这也是在 sql 2014中的工作。

SELECT DATENAME(DW,CONVERT(VARCHAR(20),GETDATE(),101))

我用过

select
case
when (extract (weekday from DATE)=0) then 'Sunday'

诸如此类。

0周日,1周一..。

试试这样: select DATENAME(DW,GETDATE())

选择 _ char (sysdate,‘ DAY’) ; 这是工作,试试看