2016-06-06 1 views
3

У меня есть этот крошечный стол с полем «fecha».Вставить в таблицу MySQL все по воскресеньям и субботам с текущего года

Мне нужен запрос MySQL, который вставляет каждое воскресенье и субботу года на стол.

Мои собственные исследования заставил меня до точки, где я знаю, что нужно сделать что-то вроде этого:

DECLARE diaRecorrido date(); 
SET diaRecorrido = date(now()); 

WHILE DATEPART(WEEKDAY,diaRecorrido) = 1 or DATEPART(WEEKDAY,diaRecorrido) = 7 
    BEGIN 
     INSERT INTO feriados (fecha) 
     VALUES (diaRecorrido) 

    IF diaRecorrido=2017/01/01 
    THEN 
    LEAVE lazo; 
    END IF; 

    END; 

Любое руководство гораздо apreciated!

+1

Тег, в котором вы работаете. Кажется, MSSql, но это могут быть другие. –

+0

Спасибо @JorgeCampos – GonHL

+0

Выньте либо mySQL, либо SQL. Их разные. – nicomp

ответ

2

Я думаю, вы должны использовать DAYOFWEEK()

create PROCEDURE generateSundayAndSaturday() 
BEGIN 
DECLARE _now DATETIME; 
DECLARE _endYear DATETIME;  
SET _endYear = DATE_FORMAT(NOW() + INTERVAL 1 YEAR ,'%Y-01-01'); 
SELECT now() into _now from dual;  
while _now < _endYear DO 
    if DAYOFWEEK(_now) = 7 THEN -- Saturday 
    -- insert into 
    SET _now = _now + INTERVAL 1 DAY; 
    ELSEIF DAYOFWEEK(_now) = 1 THEN -- Sunday 
    -- insert into 
    SET _now = _now + INTERVAL 6 DAY; 
    ELSE 
    SET _now = _now + INTERVAL 1 DAY; 
    END IF; 
END WHILE;  

END ;

+0

Wow @tuananh вы, кажется, сделали для меня все трудные ... Я попробую это и вернусь. Большое спасибо. – GonHL

+0

Огромное спасибо @tuananh! – GonHL

+0

как я могу отредактировать это, чтобы генерировать воскресенье и субботу в течение финансового года, например (1 апреля 2017 года по 31 марта 2018 года)? –

0

Вы можете создать таблицу чисел, а затем выбрать из него дни года, которые Вы хотите сохранить:

DECLARE @Date1 DATE, @Date2 DATE 
SET @Date1 = '20160101' 
SET @Date2 = '20161231' 

INSERT INTO feriados 
SELECT DATEADD(DAY,number+1,@Date1) [Date] 
FROM master..spt_values 
WHERE type = 'P' AND 
    DATEADD(DAY,number+1,@Date1) < @Date2 AND 
    (DATEPART(WEEKDAY, DATEADD(DAY,number+1,@Date1)) = 1 OR 
    DATEPART(WEEKDAY, DATEADD(DAY,number+1,@Date1)) = 7) 
0

Это запрос MS SQL (t-sql). Я думаю, вы можете исправить небольшие различия в синтаксисе для MySQL.

declare @thisYear datetime=cast(year(getdate()) as varchar)+'-01-01', 
@newyear datetime=cast(year(getdate())+1 as varchar)+'-01-01' 
declare @frstSat datetime, @frstSun datetime 

select @frstSat= dateadd(dd,7-DATEPART(weekday,@thisYear),@thisYear) , 
@frstSun= case DATEPART(weekday,@thisYear) 
when 1 then @thisYear --if 1/1 is Sunday 
else dateadd(dd,8-DATEPART(weekday,@thisYear),@thisYear) end 

;with sat as (
select @frstSat dt,'Sat' WkDay 
union all 
select dateadd(dd,7,dt),'Sat' WkDay 
from sat 
where dateadd(dd,7,dt)<@newyear 
) 
,sun as (
select @frstSun dt,'Sun' WkDay 
union all 
select dateadd(dd,7,dt),'Sun' WkDay 
from sun 
where dateadd(dd,7,dt)<@newyear 
) 
--insert mytable 
select * from sat 
union 
select * from sun 
order by dt