【问题标题】:Insert into MySQL table all Sundays and Saturdays from current year从当年的所有星期日和星期六插入 MySQL 表
【发布时间】:2016-10-05 12:42:04
【问题描述】:

我有一张小桌子,里面只有“fecha”字段。

我需要一个 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;

非常感谢任何指导!

【问题讨论】:

  • 标记您使用的数据库。似乎是 MSSql,但也可能是其他的。
  • 谢谢@JorgeCampos
  • 取出 mySQL 或 SQL。它们是不同的。

标签: mysql sql date insert datepart


【解决方案1】:

我认为,你应该使用 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;    

结束;

【讨论】:

  • 哇@tuananh 你似乎为我做了所有的努力......我会试试这个然后回来。非常感谢。
  • 如何编辑它以生成财政年度的星期日和星期六,例如(2017 年 4 月 1 日至 2018 年 3 月 31 日)?
  • 就在SET _now = '2017-04-01'; SET _endYear = '2018-03-31';上面的while _now &lt; _endYear DO行或者你可以将它作为参数传递
【解决方案2】:

您可以创建一个数字表,然后从中选择您希望保留的年份:

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)

【讨论】:

    【解决方案3】:

    这是 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 2018-06-12
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多