从SQL Server中的给定日期获取周日名称

时间:2013-11-20 20:57:55

标签: sql sql-server function date

我正在尝试从特定日期获得星期五,星期六,星期日,星期一等一天的名字。我知道有一个内置函数返回日期名称,例如:

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

既然我已经分别有月,日,年值,我会将其传递给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。我在这里错过了什么。

请告知。

7 个答案:

答案 0 :(得分:68)

测试并使用SQL 2005和2008.不确定这是否适用于2012及更高版本。

解决方案使用DATENAME而不是DATEPART

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

答案 1 :(得分:41)

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

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

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

答案 2 :(得分:6)

如果您有SQL Server 2012:

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

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

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

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

答案 5 :(得分:-1)

我用过

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

依旧......

0星期天,1星期一......

答案 6 :(得分:-1)

select to_char(sysdate,'DAY') from dual; 它的工作尝试它