No. 주를 사용하여 MySql에서 주의 첫 번째 요일 가져오기
주 번호를 사용할 수 있는 특정 주의 첫 번째 요일을 얻으려면 어떻게 해야 합니까?
예를 들어 제가 이 게시물을 쓰는 동안 우리는 29주차에 있습니다.7월 18일 일요일에 반환되는 MySQL 쿼리를 이번 WEEKNO 29를 유일한 매개 변수로 사용하여 작성하고자 합니다.
다음은 현재 날짜를 기준으로 주의 첫 번째 날과 마지막 날을 정확하게 가져오는 방법입니다.
adddate(curdate(), INTERVAL 1-DAYOFWEEK(curdate()) DAY) WeekStart,
adddate(curdate(), INTERVAL 7-DAYOFWEEK(curdate()) DAY) WeekEnd
사용할 수 있는 항목:
SELECT STR_TO_DATE('201003 Monday', '%X%V %W');
이렇게 하면 2010년 3주 월요일 날짜가 표시되며, 이 날짜는 2010-01-18일 것입니다.
다른 예:
SELECT STR_TO_DATE('201052 Sunday', '%X%V %W');
2010년 52주 일요일 날짜, 2010-12-26일 것입니다.
마지막으로, 기존의 예를 사용합니다.
SELECT STR_TO_DATE('201029 Sunday', '%X%V %W');
이것은 2010-07-18을 제공합니다.
이 게시판에서 지금까지 가장 좋아하는 답은 기본적인 형태로 다음과 같습니다.
SELECT STR_TO_DATE('201003 Monday', '%X%V %W');
이는 처음에는 좋은 답변이지만, 추가 논리를 추가하지 않는 한 week() 함수와 함께 사용하기 시작하는 날이 있습니다.
다음은 동일한 내용의 길고 지저분한 버전이지만 모든 날에 작동하는 것처럼 보입니다(BTW 현재 날짜는 이 답변에 포함됨).
SELECT STR_TO_DATE(
(IF( CAST(WEEK(NOW(),0) AS UNSIGNED) = 0,
(CONCAT(
CAST((CAST(YEAR(NOW()) AS UNSIGNED) - 1) AS CHAR),
'52 Sunday')),
(CONCAT(
CAST(YEAR(NOW()) AS CHAR),
IF( CAST(WEEK(NOW(),0) AS UNSIGNED) < 10,'0','' ),
CAST(WEEK(NOW(),0) AS CHAR),
' Sunday')))),
'%X%V %W');
이 혼란은 한 해가 특정 요일에 넘어갈 때 발생하는 문제를 처리합니다.예를 들어 2011년은 토요일에 시작했기 때문에 한 주를 시작한 일요일은 전년도입니다.다음은 하드 코딩된 예제가 포함된 선택 항목입니다.
SELECT STR_TO_DATE(
(IF( CAST(WEEK('2011-01-01',0) AS UNSIGNED) = 0,
(CONCAT(
CAST((CAST(YEAR('2011-01-01') AS UNSIGNED) - 1) AS CHAR),
'52 Sunday')),
(CONCAT(
CAST(YEAR('2011-01-01') AS CHAR),
IF( CAST(WEEK('2011-01-01',0) AS UNSIGNED) < 10,'0','' ),
CAST(WEEK('2011-01-01',0) AS CHAR),
' Sunday')))),
'%X%V %W');
YEILS >> '2010-12-26'
SELECT STR_TO_DATE(
(IF( CAST(WEEK('2011-01-02',0) AS UNSIGNED) = 0,
(CONCAT(
CAST((CAST(YEAR('2011-01-02') AS UNSIGNED) - 1) AS CHAR),
'52 Sunday')),
(CONCAT(
CAST(YEAR('2011-01-02') AS CHAR),
IF( CAST(WEEK('2011-01-02',0) AS UNSIGNED) < 10,'0','' ),
CAST(WEEK('2011-01-02',0) AS CHAR),
' Sunday')))),
'%X%V %W');
YEILS >> '2011-01-02'
그렇긴 하지만, 저는 이렇게 보이는 다른 답변이 게시된 것이 좋습니다.
SELECT
adddate(curdate(), INTERVAL 1-DAYOFWEEK(curdate()) DAY) WeekStart,
adddate(curdate(), INTERVAL 7-DAYOFWEEK(curdate()) DAY) WeekEnd;
이 방법은 엉망이 되지 않고 모든 날짜에 잘 작동하는 것 같습니다!
이것이 가장 간단하고 역동적인 방법이 될 수 있습니다.다음 코드를 사용합니다.
SELECT STR_TO_DATE( concat( concat( date_format( CURDATE( ) , '%Y' ) , WEEKOFYEAR( CURDATE( ) ) ) , ' Monday' ) , '%X%V %W' );
주 시작이 일요일이고 주말이 토요일인 경우 다음을 사용합니다.
SELECT
DATE_ADD(CURDATE(), INTERVAL (MOD(DAYOFWEEK(CURDATE())-1, 7)*-1) DAY) AS week_start,
DATE_ADD(CURDATE(), INTERVAL ((MOD(DAYOFWEEK(CURDATE())-1, 7)*-1)+6) DAY) AS week_end
MySQL에서 테스트됨.
dcp의 답변에 추가:
SELECT STR_TO_DATE('201553 Monday', '%x%v %W')
한 주의 시작이 월요일인 월요일을 제공합니다.형식 지정자는 작게 작성하면 됩니다.수학은 필요 없습니다.
테스트되지 않음(MySQL이 없습니다):
date_add(
date_sub(curdate(), interval weekday(curdate()) day),
interval ((NUM-weekofyear(curdate()))*7) day)
SELECT CONCAT(RIGHT(STR_TO_DATE(CONCAT(YEARWEEK(NOW()),'Monday'), '%X%V %W'),2),'-',
MID(STR_TO_DATE(CONCAT(YEARWEEK(NOW()),'Monday'), '%X%V %W'),6,2),'-',
LEFT(STR_TO_DATE(CONCAT(YEARWEEK(NOW()),'Monday'), '%X%V %W'),4)) AS 'Lundi',
CONCAT(RIGHT(STR_TO_DATE(CONCAT(YEAR(NOW()), week(now(),3),'Sunday'), '%X%V %W'),2),'-',
MID(STR_TO_DATE(CONCAT(YEAR(NOW()), week(now(),3),'Sunday'), '%X%V %W'),6,2),'-',
LEFT(STR_TO_DATE(CONCAT(YEAR(NOW()), week(now(),3),'Sunday'), '%X%V %W'),4)) AS 'Dimanche';
위의 용액으로 테스트됨.저는 이것을 사용하게 되었습니다.
STR_TO_DATE( concat( YEARWEEK("2012-12-31", 3) , ' Monday' ) , '%x%v %W' )
몇 가지 요점:
- ISO 연도 및 주에 '%x%v %W' 사용
- ISO 모드의 경우 YEARWEEK('your date', 3)를 두 번째 인수에 3과 함께 사용합니다(월요일부터 시작).
첫 번째 월요일을 찾기 위해 아래 날짜로 테스트:
- 2012-12-31 --> 2012-12-31
- 2014-01-07 --> 2014-01-06
언급URL : https://stackoverflow.com/questions/3317980/getting-first-day-of-the-week-in-mysql-using-week-no
'programing' 카테고리의 다른 글
Management Studio 2012용 Poor Mans T-SQL 포맷 애드인이 Management Studio 2014에서 작동합니까? (0) | 2023.09.09 |
---|---|
mysqli-> insert_id는 새 서버로 이동한 후 항상 PHP에서 0을 반환합니다. (0) | 2023.09.09 |
jQuery Date Picker - 과거 날짜 사용 안 함 (0) | 2023.09.04 |
a를 개발하거나 배포하려면 수수료를 내야 합니까?NET 어플리케이션? (0) | 2023.09.04 |
com.myql.jdbc.exceptions.jdbc4가 있는 이유는 무엇입니까?커뮤니케이션예외:통신 링크 고장 (0) | 2023.09.04 |