我试图创建一个程序来防止插入错误的日期。该表接受8位整数,因此April 28 2015
将作为4282015
插入。
我的逻辑是创建一些临时变量来存储month
,date
和year
,然后通过从原始的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;
如果有人想看看并给我一些指示或解释一些东西,我们将不胜感激!
答案 0 :(得分:3)
如果你做了明智的事情,你将把列创建为Date或DateTime类型。由于您同时拥有MySQL和SQL-Server标记,因此我实际上并不知道您使用的是哪个DBMS,但它们都支持日期类型。
不要让它比你需要的更复杂。