创建验证要插入的数据的过程

时间:2015-04-28 06:01:46

标签: mysql stored-procedures

我试图创建一个程序来防止插入错误的日期。该表接受8位整数,因此April 28 2015将作为4282015插入。

我的逻辑是创建一些临时变量来存储monthdateyear,然后通过从原始的8位数值中取出子字符串来赋值。然后我会将它们转换为字符串并连接在一起(我不确定是否有连接int的方法,如果有可能会更好的话)然后将其转换回int插入。这是我到目前为止所尝试过的。

更新:"样本" table只是一个例子,我将在一个设置不佳的数据库中的另一个表上运行它(我的工作是运行分析并稍微修复它)。他们设置的方式,日期是一个整数。

CREATE TABLE sample (
                id INT not null, 
                date INT not null
);


CREATE PROCEDURE InsertDate ( date int(8))
BEGIN
    DECLARE month INT;
    DECLARE day INT;
    DECLARE year INT;
    SET month = SUBSTRING(new.date, 1, 2);
    SET day = SUBSTRING(new.date, 3, 2);
    SET year = SUBSTRING(new.date, 5, 4);

    IF ( month IN(1, 12) AND day IN(1, 31) AND year IN(2012, 2013) )
        Declare temp as int;
        #Cast all variables as VARCHARS to concatenate together
        #Convert back to INT to be inserted
        Set temp =  CAST( (CAST(month AS VARCHAR(2)) +
                CAST(day AS VARCHAR(2)) + 
                CAST(year as VARCHAR(4))) as INT );
        insert into sample (id, date) values (1 ,temp);
    END IF;
END;

如果有人想看看并给我一些指示或解释一些东西,我们将不胜感激!

1 个答案:

答案 0 :(得分:3)

如果你做了明智的事情,你将把列创建为Date或DateTime类型。由于您同时拥有MySQL和SQL-Server标记,因此我实际上并不知道您使用的是哪个DBMS,但它们都支持日期类型。

不要让它比你需要的更复杂。