当前位置: 首页 > 知识库问答 >
问题:

MariaDB pl/sql来填充一个从“1990-01-01”到“2000-12-31”的日期表

路欣荣
2023-03-14

我尝试创建一个过程或函数来填充MariaDB中Time_Dim的表名。

DELIMITER /
CREATE FUNCTION filltimeDim ()
BEGIN
    DECLARE vQuarter VARCHAR(6);
    DECLARE vMonth_Name VARCHAR(20);
    DECLARE vdate_id date;
    DECLARE vyear_id CHAR(4);
    DECLARE vweekly_Name VARCHAR(20);
    DECLARE vMonth_Num TINYINT(10);
    DECLARE vweekday_Num TINYINT(10);
    BEGIN
        SET vdate_id =  CONVERT('1998-01-01', DATE);
        WHILE (CONVERT('vdate_id' USING utf8) <=  '2002-12-31')
        LOOP
            SET vyear_id =  YEAR(vdate_id);
            SET vQuarter =  QUARTER(vdate_id);
            SET vMonth_Name =  MONTHNAME(vdate_id);
            SET vweekly_Name =  DAYOFWEEK(vdate_id);
            SET vMonth_Num =  MONTH(vdate_id);
            SET vweekday_Num =  WEEKDAY(vdate_id);
            INSERT INTO Time_Dim VALUES 
            (vdate_id, vyear_id, vquarter, vMonth_Name,vweekly_Name,vMonth_Num,vweekday_Num);
            SET vdate_id = vdate_id + 1;
        END LOOP;   
    END;
END; /

错误1064 (42000):您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,在第13行的“LOOP SETvyear_id=YEAR(vdate_id); SET vQuarter=QUA”附近使用正确的语法

共有2个答案

秦权
2023-03-14

您可以使用序列存储引擎:

-- SELECT
  -- DATEDIFF('2002-12-31', '1990-01-01'); -- 4747

INSERT INTO `Time_Dim` (
  `vdate_id`,
  `vyear_id`,
  `vquarter`,
  `vMonth_Name`,
  `vweekly_Name`,
  `vMonth_Num`,
  `vweekday_Num`
)
SELECT
  `der`.`day`,
  YEAR(`der`.`day`),
  QUARTER(`der`.`day`),
  MONTHNAME(`der`.`day`),
  DAYOFWEEK(`der`.`day`),
  MONTH(`der`.`day`),
  WEEKDAY(`der`.`day`)
FROM (
  SELECT
    '1990-01-01' + INTERVAL (`seq`) DAY `day`
  FROM
    `seq_0_to_4747`
) `der`;

看看小提琴。

段劲
2023-03-14

MariaDB中while的语法为:

[begin_label:] WHILE search_condition DO
    statement_list
END WHILE [end_label]

https://mariadb.com/kb/en/library/while/

您不应该使用“循环”关键字

 类似资料:
  • 在windows上的MongoDB Shell中,如果运行值为的查询 它实际上似乎在寻找 如果您直接在Mongo Shell中输入“new ISODate('0001-01-01T00:00:00Z')”,您可以在返回ISODate(“1901-01-01T00:00:00Z”)时看到正在进行的转换。 奇怪的是,当您使用“new Date”而不是“new ISODate”时,请输入: 它返回正确的

  • 问题内容: 我有一个日期格式为的表格。为了搜索数据库,我将日期格式转换为。但是当我显示它时。PHP代码如下: 为什么会这样呢?如何将其格式化为? 问题答案: 替换为:

  • 我想在excel-vba中编写一个代码,在工作表的一列中填充特定年份的日期。< br >该准则还应考虑闰年。比方说,我已经在单元格B1中输入了年份(如2020年),因此列A应该填充366个日期条目(考虑到闰年)。

  • 1. 前言 大家好,从本小节开始,我们将一起学习SQL wiki系列。谈到 SQL,每个人心里会有不同的理解,但大家可能都会不约而同地想到一个词——数据库。SQL 发展到今天,它的足迹其实早已遍布各个应用领域了。 学好 SQL,你可以做到很多,数据管理、数据分析甚至机器学习,你都可以用 SQL 来完成。学习是一个颇为技巧的活,它也遵守二八定律,学好20%的知识你就可以做好80%的事情,这也是wik

  • 问题内容: 我目前正在尝试通过将日期转换为时间戳来在数据集中生成数字特征。如果在Mac上运行,它可以完美运行,在Windows上,它会抛出: 这可能是由于Windows不支持1970-01-01之前的unix时间戳。我的约会日期从1955年开始。这是我的代码: 我在某处看到建议使用,但我不知道如何集成它。 问题答案: 您可以通过(隐式)使用计算“格雷戈里”时间戳来实现,该时间戳对于从1582年10

  • 问题内容: 我正在使用具有以下格式mm / dd / yyyy的jquery datepicker,但我需要它是sql数据库的yyyy-mm-dd,所以我正在使用它。 与以下 不幸的是,无论输入什么,我都会在数据库中注册1970-01-01。有什么想法我做错了吗?非常感谢你的帮助。 问题答案: 当您从那里回来时,意味着时间戳不正确。该日期是UNIX时代。 当涉及到Javascript(在这种情况下