我正在尝试从特定日期获得星期五,星期六,星期日,星期一等一天的名字。我知道有一个内置函数返回日期名称,例如:
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。我在这里错过了什么。
请告知。
答案 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; 它的工作尝试它