Получить имя дня недели из заданной даты в SQL Server
Я пытаюсь получить название дня, как пятница, суббота, воскресенье, понедельник и т.д. С заданной даты. Я знаю, что есть встроенная функция, которая возвращает название дня, например:
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
Это возвращает неправильное название дня. Я попытался заменить/на - чтобы в функции DATENAME мой SQL-запрос стал следующим:
SELECT DATENAME(dw,'09/23/2013')
--becomes
SELECT DATENAME(dw,'09-23-2013')
но он все еще возвращает неправильное имя дня из моего запроса SQL. Я что-то здесь упускаю.
Пожалуйста, порекомендуйте.
Ответы
Ответ 1
Вам нужно построить строку даты. Вы используете операторы /
или -
, которые выполняют MATH/числовые операции с числовыми значениями возврата DATEPART. Затем DATENAME
принимает это числовое значение и интерпретирует его как дату.
Вам нужно преобразовать его в строку. Например:
SELECT (
DATENAME(dw,
CAST(DATEPART(m, GETDATE()) AS VARCHAR)
+ '/'
+ CAST(DATEPART(d, myDateCol1) AS VARCHAR)
+ '/'
+ CAST(DATEPART(yy, getdate()) AS VARCHAR))
)
Ответ 2
Протестировано и работает на SQL 2005 и 2008. Не уверен, что это работает в 2012 году и позже.
Решение использует DATENAME вместо DATEPART
select datename(dw,getdate()) --Thursday
select datepart(dw,getdate()) --2
Это тоже работа в sql 2014.
Ответ 3
Если у вас есть SQL Server 2012:
Если ваши части даты являются целыми числами, вы можете использовать DATEFROMPARTS
.
SELECT DATENAME( dw, DATEFROMPARTS( @Year, @Month, @Day ) )
Если ваши детали даты являются строками, вы можете использовать функцию CONCAT
.
SELECT DATENAME( dw, CONVERT( date, CONCAT( @Day, '/' , @Month, '/', @Year ), 103 ) )
Ответ 4
Попробуйте так: выберите DATENAME (DW, GETDATE())
Ответ 5
SELECT DATENAME(DW,CONVERT(VARCHAR(20),GETDATE(),101))
Ответ 6
Я использовал
select
case
when (extract (weekday from DATE)=0) then 'Sunday'
и так далее...
0 воскресенье, 1 понедельник...