从SQL中的给定日期获取星期几名称

我正在尝试从给定日期获得一个周五,周六,周日,周一等日期名称。 我知道有一个内置函数可以返回日期名称,例如:

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

此SQL查询返回:

'星期一'

都可以 但我想单独通过DATENAME

我正在使用内置的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

现在,我分别具有月,日,年值,将其传递给我的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

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

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

但是它仍然从我的SQL查询返回不正确的dayName。 我在这里想念什么吗?

请指教。

theITvideos asked 2019-11-18T22:26:09Z
6个解决方案
69 votes

经过测试并可以在SQL 2005和2008上使用。不确定在2012年及以后的版本是否可以使用。

该解决方案使用DATENAME而不是DATEPART

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

这在sql 2014中也有效。

Irfan Raza answered 2019-11-18T22:27:17Z
42 votes

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

您需要将其转换为字符串。 例如:

SELECT (
  DATENAME(dw, 
  CAST(DATEPART(m, GETDATE()) AS VARCHAR) 
  + '/' 
  + CAST(DATEPART(d, myDateCol1) AS VARCHAR) 
  + '/' 
  + CAST(DATEPART(yy, getdate()) AS VARCHAR))
  )
Eli Gassert answered 2019-11-18T22:26:40Z
6 votes

如果您有SQL Server 2012:

如果日期部分是整数,则可以使用CONCAT函数。

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

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

SELECT DATENAME( dw, CONVERT( date, CONCAT( @Day, '/' , @Month, '/', @Year ), 103 ) )
Greenstone Walker answered 2019-11-18T22:27:54Z
3 votes

像这样尝试:选择DATENAME(DW,GETDATE())

Author PraWin answered 2019-11-18T22:28:19Z
0 votes
SELECT DATENAME(DW,CONVERT(VARCHAR(20),GETDATE(),101))
Chandra Sekhar Reddy Ginuga answered 2019-11-18T22:28:37Z
-1 votes

我用了

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

等等...

0星期日,1星期一...

Leo Fazzi answered 2019-11-18T22:29:09Z
translate from https://stackoverflow.com:/questions/20106871/get-week-day-name-from-a-given-date-in-sql-server