#sql-server #ms-access
#sql-сервер #ms-access
Вопрос:
Я хотел бы преобразовать SQL-запрос в MS Access в SQL Server. Этот запрос касается преобразования даты в день недели. Пожалуйста, сообщите.
MS Access:
UPDATE Contact_Hist
SET WK_DAY = weekdayname(weekday(cdate(mid(date_id,5,2) amp; "/" amp; right(date_id,2) amp; "/" amp; left(date_id,4))));
Например, DATE_ID = 20140703
согласно таблице ( Contact_Hist
) и хотел бы преобразовать в день недели, т.е. 'Thursday'
.
Комментарии:
1. DATENAME(DW, GETDATE()) вернет ‘Thursday’ в sql server
Ответ №1:
Вы должны использовать DatePart()
функцию SQL Server:
DatePart(weekday, Cast('20140703' AS date))
Это вернет целое число от 1 (Понедельник) и 7 (Воскресенье) включительно.
<правка2>
То, как интерпретируется DatePart()
возвращаемое значение [integer], определяется SET DATEFIRST
настройками SQL Server (или конфигурацией по умолчанию). То есть, является ли возвращаемое значение 1 понедельником, 2 — понедельником и так далее.
</edit2>
<редактировать>
Чтобы получить название дня недели, используйте DateName()
функцию.
DateName(weekday, Cast('20140703' AS date))
Для справочных целей оба DatePart()
и DateName()
принимают «дату» (то есть значение time, date, smalldatetime, datetime, datetime2 или datetimeoffset) в качестве второго параметра. SQL Server неявно преобразует строку даты в дату, поэтому CAST('20140703' AS date)
это не требуется.
</редактировать>
Комментарии:
1. Вы можете использовать
DATENAME
для получения строки вместо целого числа.2.
1 (Monday)
— Я вижу понедельник как 2.3. Это значение зависит от того, как настроен ваш сервер
SET DATEFIRST
.
Ответ №2:
В MS SQL Server 2012 вы можете сделать следующее и вернуть «пятницу» обратно:
SELECT DATENAME ( weekday , '20140704' )
как показано в этом SQLFiddle:http://sqlfiddle.com /#!6/fc24a/8
Итак, сделайте:
UPDATE Contact_Hist SET WK_DAY = DATENAME ( weekday , date_id )
Комментарии:
1. Спасибо за информацию! Но я все еще получаю ошибку при выполнении запроса. Date_id является типом данных с плавающей запятой и должен быть преобразован в date. Не могли бы вы, пожалуйста, помочь?
2. Вы преобразуете это в дату или строку?
3. @user3802118 вы можете преобразовать в int, а затем в varchar / string следующим образом:
SELECT DATENAME ( weekday , CONVERT(varchar,CONVERT(int,20140704.0))) )
таким образом, ваш полный запрос в конечном итоге будетUPDATE Contact_Hist SET WK_DAY = DATENAME ( weekday , (CONVERT(varchar,CONVERT(int,20140704.0))) )