[SQL] 어떻게 날짜에 주 수를 변환하는?
SQL어떻게 날짜에 주 수를 변환하는?
일 년 달력 주 감안할 때, 내가 어떻게 그주의 화요일 날짜로받을 수 있나요?
해결법
-
==============================
1.을 감안할 때 당신은 년 (예를 들어, SELECT 문에서) 변수로 CW (달력 주)는 다음과 같이 날짜를 얻을 수 있습니다 :
을 감안할 때 당신은 년 (예를 들어, SELECT 문에서) 변수로 CW (달력 주)는 다음과 같이 날짜를 얻을 수 있습니다 :
DATE_SUB( DATE_ADD(MAKEDATE(year, 1), INTERVAL cw WEEK), INTERVAL WEEKDAY( DATE_ADD(MAKEDATE(year, 1), INTERVAL cw WEEK) ) -1 DAY),
문구 DATE_ADD (MAKEDATE (년, 1), INTERVAL CW의 WEEK)는 중복; 변수를 저장하지 않았다. 은 SQL 문은 MySQL을 나를 위해 잘 작동했다.
UPDATE : 그냥 해명 : WEEKDAY (DATE_ADD (MAKEDATE (년, 1), INTERVAL CW의 주))주의 최초의 날을 얻을 것입니다. 그것에서 수 Substracting (-1 화요일을, -2 수요일 등은 당신을위한 주에 특정 일을 선택합니다). 여길 봐.
-
==============================
2.MySQL의에서 STR_TO_DATE () 함수는 한 줄에 트릭을 할 수 있습니다!
MySQL의에서 STR_TO_DATE () 함수는 한 줄에 트릭을 할 수 있습니다!
예 : 우리는 2013 년의 32 회 주 화요일의 날짜를 싶어.
SELECT STR_TO_DATE('2013 32 Tuesday', '%X %V %W');
겠습니까 출력 :
'2013-08-13'
나는이 문제에 대한 최고의 짧은 솔루션입니다 생각합니다.
-
==============================
3.나는 모든 발견 달력 주간의 정의는 "연속 7 일 동안 일요일에 시작"고 말했다.
나는 모든 발견 달력 주간의 정의는 "연속 7 일 동안 일요일에 시작"고 말했다.
다음은 MySQL의 고유의 것입니다 ... 당신의 마일리지가 다를 수 있습니다 ...
DATE_ADD (MAKEDATE (년, 1), INTERVAL CW의 WEEK)가 정확하지 올해의 1에서 주를 추가 ...
mysql> select DATE_ADD(MAKEDATE(2011, 1), INTERVAL 1 WEEK); +----------------------------------------------+ | DATE_ADD(MAKEDATE(2011, 1), INTERVAL 1 WEEK) | +----------------------------------------------+ | 2011-01-08 | +----------------------------------------------+
이 정의에 의하면, 1-53에서 달력 주 범위를 가지고,이 그 주 일요일 표현해야하는 경우에만 의미가 있습니다. 따라서, 우리는 화요일를 얻기 위해 올해의 n 번째 일요일에 이일을 추가합니다.
다음은 올해의 첫 번째 일요일의 날짜를 얻을 수 ...
mysql> select date_add('2012-01-01', interval (8 - dayofweek('2011-01-01')) % 7 DAY); +------------------------------------------------------------------------+ | date_add('2012-01-01', interval (8 - dayofweek('2011-01-01')) % 7 DAY) | +------------------------------------------------------------------------+ | 2012-01-02 | +------------------------------------------------------------------------+
(우리가 1에서 이미 있기 때문에 구주 간격 주) 그래서 이것은 10 일 일요일의 날짜를 얻을 것이다 ...
mysql> select date_add( date_add('2010-01-01', interval (8 - dayofweek('2010-01-01')) % 7 DAY) , interval 9 week); +-----------------------------------------------------------------------------------------------------+ | date_add( date_add('2010-01-01', interval (8 - dayofweek('2010-01-01')) % 7 DAY) , interval 9 week) | +-----------------------------------------------------------------------------------------------------+ | 2010-03-07 | +-----------------------------------------------------------------------------------------------------+
화요일에 도착 2 일 이상 추가 ...
mysql> select date_add( date_add( date_add('2010-01-01', interval (8 - dayofweek('2010-01-01')) % 7 DAY) , interval 9 week), interval 2 day); +--------------------------------------------------------------------------------------------------------------------------------+ | date_add( date_add( date_add('2010-01-01', interval (8 - dayofweek('2010-01-01')) % 7 DAY) , interval 9 week), interval 2 day) | +--------------------------------------------------------------------------------------------------------------------------------+ | 2010-03-09 | +--------------------------------------------------------------------------------------------------------------------------------+
또는 더 일반적으로 :
select date_add( date_add( date_add('<year>-01-01', interval (8 - dayofweek('<year>-01-01')) % 7 DAY) , interval <week-1> week) , interval <dayOfWeek> day );
-
==============================
4.indago의 대답을보고 한 후 테스트의 무리를하고, 나는 결과로 다음 주 얻고 있었다.
indago의 대답을보고 한 후 테스트의 무리를하고, 나는 결과로 다음 주 얻고 있었다.
나는 약간의 조정을했습니다, 그리고 날짜는 일치 :
SELECT STR_TO_DATE('2019 1 Monday', '%x %v %W') -- beginning of week SELECT STR_TO_DATE('2019 1 Sunday', '%x %v %W') -- end of week
여기에 결과를 비교할 수 있습니다.
-
==============================
5.
DELIMITER $$ CREATE FUNCTION fn_yearweek_to_date( var_yearweek INTEGER UNSIGNED, var_weekday ENUM( 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ) ) RETURNS DATE DETERMINISTIC BEGIN RETURN STR_TO_DATE(CONCAT(var_yearweek, var_weekday), '%x%v%W'); END; DELIMITER ; SELECT fn_yearweek_to_date(YEARWEEK(NOW(), 1), 'Sunday'), fn_yearweek_to_date(YEARWEEK(NOW(), 1), 7) ;
-
==============================
6.그럼 이론적으로는 매월 첫 번째 화요일을 찾은 다음 7 *을 추가 얻기 위해 DW 매개 변수 DATEPART를 사용할 수 있습니다 [CalenderWeek]는 적절한 날짜를 얻을 수 있습니다
그럼 이론적으로는 매월 첫 번째 화요일을 찾은 다음 7 *을 추가 얻기 위해 DW 매개 변수 DATEPART를 사용할 수 있습니다 [CalenderWeek]는 적절한 날짜를 얻을 수 있습니다
http://msdn.microsoft.com/en-us/library/ms174420.aspx
-
==============================
7.나는 PHP를 사용하여 함수의 논리를 쓰기 쉽게 될 거라고 생각합니다.
나는 PHP를 사용하여 함수의 논리를 쓰기 쉽게 될 거라고 생각합니다.
당신이 PHP 스크립트를 사용하는 경우, 당신은 "일 - 월 - 년"과 같은 형식으로 모든 날짜를 넣어 (1980에서 2038으로 또는 MySQL의 날짜 열에서) 매일 통과하는 루프를 사용할 수 있습니다.
http://www.php.net/manual/en/function.date-format.php
그런 다음 요일로 변환하기 위해 그 루프에서 날짜를 날짜 형식을 사용합니다.
다음은 날짜 형식에서 사용할 수있는 것들의 목록입니다. http://www.php.net/manual/en/function.date.php 디 엔 엘 w 요일 모든 도움 당신.
-
==============================
8.주어 솔루션은 해의 최초의 주 12 월 말에 시작 수 있다는 것을 고려하지 않습니다. 우리가 확인해야합니다 그래서 월 1 일 이전 또는 새 해의 calendarweek에 속하는 경우 :
주어 솔루션은 해의 최초의 주 12 월 말에 시작 수 있다는 것을 고려하지 않습니다. 우리가 확인해야합니다 그래서 월 1 일 이전 또는 새 해의 calendarweek에 속하는 경우 :
SET @week=1; SET @year=2014; SET @x_weeks_after_new_year=DATE_ADD(MAKEDATE(@year, 1), INTERVAL (SELECT IF(WEEKOFYEAR(MAKEDATE(@year, 1))>50 , 0 , -1))+@week WEEK); SELECT CONCAT(@year, '-', @week) WeekOfYear, @weekStart:=DATE_SUB(@x_weeks_after_new_year, INTERVAL WEEKDAY(@x_weeks_after_new_year) DAY) Monday, DATE_ADD(@weekStart, INTERVAL 6 DAY) Sunday
이 발생합니다 :
+------------+------------+------------+ | WeekOfYear | Monday | Sunday | +------------+------------+------------+ | 2014-1 | 2013-12-30 | 2014-01-05 | +------------+------------+------------+
-
==============================
9.여기에 힘의 도움이 그 예입니다 :
여기에 힘의 도움이 그 예입니다 :
SET DATEFIRST 1 declare @wk int set @wk = 33 declare @yr int set @yr = 2011 select dateadd (week, @wk, dateadd (year, @yr-1900, 0)) - 2 - datepart(dw, dateadd (week, @wk, dateadd (year, @yr-1900, 0)) - 4) as date
그 결과는 다음과 같습니다
2011-08-16 00:00:00.000
이는 오늘 (화)입니다.
-
==============================
10.upvoted 솔루션은 2014 년 2015 년 나를 위해 일하지만, 올해의 시작은 월요일이 아닌 일요일에 가능하기 때문에 (2016 년 나를 위해없는 일을했다.
upvoted 솔루션은 2014 년 2015 년 나를 위해 일하지만, 올해의 시작은 월요일이 아닌 일요일에 가능하기 때문에 (2016 년 나를 위해없는 일을했다.
나는이 문제를 해결하기 위해 다음과 같은 기능을 사용 :
STR_TO_DATE ( CONCAT (MOD (NR + 1 일, 7) '/'week_nr '/'년), '%와 / U % / % Y')
내 데이터의 경우 : day_nr = 0 -> 월요일
day_nr = 6 -> 일요일
나는 모드 기능이 문제를 해결했다 그래서
from https://stackoverflow.com/questions/7078730/how-to-convert-number-of-week-into-date by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 동적 피벗 (0) | 2020.04.02 |
---|---|
[SQL] 삽입 및 인출 java.time.LocalDate는 H2와 같은 SQL 데이터베이스에서 /에 객체 (0) | 2020.04.02 |
[SQL] MySQL은 : 분할 쉼표는 여러 행으로 구분 된 목록 (0) | 2020.04.02 |
[SQL] 합니까 sqlite3를 외부 키 제약 조건을 지원하지? (0) | 2020.04.02 |
[SQL] 무향 그래프의 연결된 모든 서브 그래프를 찾는 방법 (0) | 2020.04.02 |