Подтвердить что ты не робот

Получить имя дня недели из заданной даты в 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. Я что-то здесь упускаю.

Пожалуйста, порекомендуйте.

4b9b3361

Ответ 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 понедельник...