Как получить дату из номера недели и дня в sql? - PullRequest
7 голосов
/ 27 октября 2019

У меня есть номер недели и соответствующий им день недели (т.е. понедельник, вторник, среда, .....), хранящиеся в таблицах.
Предполагается, что следующий код возвращает номер недели от даты, но я 'Я не могу перевернуть это

select WEEKOFYEAR(CURDATE())

Моя таблица:

RecordID|Record|WeekID|DayofWeek
--------------------------------
1       |text1 |43    |mon
2       |text2 |43    |tue
3       |text3 |44    |wed

Желаемый вывод:

RecordID|Record|Date
--------------------------------
1       |text1 |2019/10/30
2       |text2 |2019/10/31
3       |text3 |2019/11/01

Я хочу получить из них дату (при условии, что текущаягод). Это возможно в SQL или это можно сделать только на стороне сервера?
* Даты только для представления

Ответы [ 3 ]

4 голосов
/ 27 октября 2019

Следующий пример скрипта может вам помочь. Надеюсь, что все необходимые значения доступны в вашей базе данных, и вы передали их функции соответственно:

SELECT STR_TO_DATE('2013 10 Tuesday', '%X %V %W');

--2013 is the year value
--10 is the week number
--Tuesday is the day name

Если у вас есть все три значения, доступные в вашей таблице, и запустите функцию STR_TO_DATE, предоставив соответствующие значения - это вернетвам нравится дата - "2013-03-12".

Вы можете проверить следующий скрипт -

SELECT 
STR_TO_DATE(concat('2019',' ', WeekID,' ', DayofWeek), '%X %V %W') 
FROM (
    SELECT 1 RecordID, 'text1' Record, 43 WeekID,'mon' DayofWeek UNION ALL
    SELECT 2,'text2',43,'tue' UNION ALL
    SELECT 3,'text3',44,'wed'
)A;

Ваш окончательный запрос должен быть таким, как показано ниже -

SELECT 
STR_TO_DATE(concat('2019',' ', WeekID,' ', DayofWeek), '%X %V %W') 
FROM your_table_name A;

Примечание: год 2019 фиксирован, так как это значение недоступно в вашей таблице. Если доступно, вы также можете использовать этот столбец динамически, как и другие столбцы.

2 голосов
/ 27 октября 2019

Ваш вопрос не совсем понятен.

Полагаю, у вас есть столбцы

  • year со значениями типа 2001
  • WeekID со значениями типа 36
  • DayOfWeek со значениями типа tue.

Затем вы можете использовать выражение, подобное этому, чтобы получить значение DATE. MySQL имеет строки формата даты для недели и дня недели.

SELECT STR_TO_DATE (CONCAT(year, '/', week, '/', weekday), '%Y/%v/%a')

Вот скрипка. https://www.db -fiddle.com / f / iGrnkM5WgWTVPxuqxfPxdK / 0

Но будьте осторожны, вычисление номера недели является бизнес-правилом в соответствии с местными и международными стандартами. Обязательно проверяйте даты в первые несколько дней нескольких разных календарных лет, чтобы убедиться, что вы понимаете свою ситуацию.

Вы можете прочитать о вариантах вычисления недели здесь . Вы используете WEEKOFYEAR() для получения номера недели;что соответствует спецификатору формата %v.

1 голос
/ 27 октября 2019

Вы не можете получить дату только из номера недели и дня недели, вам также понадобится год.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...