¿Cómo puedo obtener el primer día de la semana cuyo número de semana está disponible?

Por ejemplo, mientras escribo este post estamos en SEMANA 29 de.Me gustaría escribir una consulta de MySQL que volverá domingo 18 de julio de el uso de este WEEKNO 29 como el único parámetro disponible.

InformationsquelleAutor davykiash | 2010-07-23

8 Comentarios

  1. 45

    Puede utilizar:

    SELECT STR_TO_DATE('201003 Monday', '%X%V %W');

    Esto le daría el lunes la fecha de la semana 3 de 2010, lo que podría ser 2010-01-18.

    Otro ejemplo:

     SELECT STR_TO_DATE('201052 Sunday', '%X%V %W');

    Se le dará el domingo en la fecha de la semana 52 de 2010, lo que podría ser 2010-12-26.

    Y, finalmente, mediante su ejemplo original:

    SELECT STR_TO_DATE('201029 Sunday', '%X%V %W');

    Esto le da 2010-07-18.

    • Cuando se utiliza semana del modo 3 (estándar ISO, qv stackoverflow.com/questions/11788885), a continuación, SELECCIONE STR_TO_DATE(‘201003 lunes’, ‘%X%V %W’) dará el lunes de la semana siguiente!
    • Creo que no es correcto. Intente ejecutar SELECCIONE STR_TO_DATE( ‘201402 domingo’, ‘%X%V %W’ ) , STR_TO_DATE( ‘201402 lunes’, ‘%X%V %W’ ) – vas a ver que no es el domingo de la 2ª semana y el lunes de la 2ª semana – es el segundo domingo y 2do lunes del AÑO
    • Mi solución para eso es restar 1 semana después de la conversión: DATE_SUB(STR_TO_DATE(CONCAT(YEARWEEK('201402 Sunday', 3), ' Monday'), '%X%V %W'), INTERVAL 1 WEEK)
    • Creo que STR_TO_DATE( CONCAT(AÑO(CURDATE()), SEMANA(CURDATE()) + 1, ‘domingo’), ‘%X%V %W’) week_end es un poco readeable
    • Usted puede necesitar usar, %x%v en lugar de %X%V para obtener el resultado deseado. Porque %X%V usar el domingo como el día de inicio del mes, %x%v utilizan el lunes como día de inicio del mes..
  2. 48

    Esta es una forma precisa de llegar el primer día de la semana y el último día de la semana basado en la fecha actual:

    adddate(curdate(), INTERVAL 1-DAYOFWEEK(curdate()) DAY) WeekStart,
    adddate(curdate(), INTERVAL 7-DAYOFWEEK(curdate()) DAY) WeekEnd
    • Creo que esta solución podría ser afectado por la configuración regional del sistema, yo uso este lugar adddate(curdate(), INTERVAL -WEEKDAY(curdate()) DAY) WeekStart
    • gracias por tu comentario. …y si alguien está buscando para el viernes último día de la semana (es decir, el último día de trabajo), a continuación, intente esto: <code> adddate(curdate(), INTERVAL 4-día de la SEMANA(curdate()) DÍA) SHOULD_BE_Friday </código de>
    • Esta respuesta es buena, pero no esta pregunta solicitud de una solución cuando lo que se da es: NÚMERO de la SEMANA/ YEARWEEK? Esta respuesta en realidad sólo se aplica a un caso donde se tiene una date, o que están trabajando con current_date.
  3. 4

    La respuesta que más le gustaba hasta ahora en este foro se ve como esta en su forma básica:

    SELECT STR_TO_DATE('201003 Monday', '%X%V %W'); 

    Esta es una buena respuesta para empezar, pero se rompe en algunos días, cuando empiezas a utilizarlo en conjunción con la semana() función, a menos que usted añadir algo de lógica.

    Aquí es un largo, desordenado versión de la misma cosa, pero que parece que funciona todos los días (por CIERTO, la fecha actual se construyó en esta respuesta):

    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');

    Este lío maneja los problemas que surgen cuando el año rollos de más en ciertos días de la semana. Por ejemplo, en 2011 comenzó un sábado, así que el domingo que comenzó la semana pasada fue en el año previo. Aquí está la selección con codificados ejemplos:

    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');

    RENDIMIENTO >> ‘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');

    RENDIMIENTO >> ‘2011-01-02’

    Todo lo que dijo, me gusta la otra respuesta a publicado que se parece a esto

    SELECT
    adddate(curdate(), INTERVAL 1-DAYOFWEEK(curdate()) DAY) WeekStart, 
    adddate(curdate(), INTERVAL 7-DAYOFWEEK(curdate()) DAY) WeekEnd;

    Este método parece funcionar igual de bien en todas las fechas sin el lío!

    • No podía usted hacer esto mucho más sencilla, utilizando un modo de 2? YEARWEEK(‘2011-01-01’, 2) informes de la 52 semana de 2010, en contraposición a modo 0, que devuelve el 0 de la semana de 2011.
  4. 3

    Esta puede ser la forma más sencilla y dinámica para él. Utilice el siguiente código.

    SELECT STR_TO_DATE( concat( concat( date_format( CURDATE( ) , '%Y' ) , WEEKOFYEAR( CURDATE( ) ) ) , ' Monday' ) , '%X%V %W' );
  5. 2

    Si su semana de inicio es domingo y fin de semana es el sábado, el uso de este:

    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

    Probado en MySQL.

  6. 1

    Una adición a dcp respuesta:

    SELECT STR_TO_DATE('201553 Monday', '%x%v %W')

    Le dará el lunes cuando el inicio de la semana es el lunes. Los especificadores de formato sólo tienen que ser escritas en pequeño. No necesita matemáticas.

  7. 0

    No probado (no tengo MySQL en la mano):

    date_add(
       date_sub(curdate(), interval weekday(curdate()) day),
       interval ((NUM-weekofyear(curdate()))*7) day)
  8. 0
    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';

Dejar respuesta

Please enter your comment!
Please enter your name here