我正在尝试为客户端设置一些软件的演示,并需要实时报告数据。这是一种业务软件,它将依赖通常驻留在ERP类型系统中的信息,其中有销售订单和采购订单(以及构建这些东西的所有数据)。
我看了很久很难找到一个样本ERP数据库,我唯一能想到的就是MS MySQL DB的AdventureWorks端口。这是伟大的,有很多的数据,我可以使用样本。
问题是,订单上的所有日期都是2001-2004年。
我想要做的是编写一个简单的MySQL脚本,它将遍历整个AdventureWorks DB中的每个日期时间字段,并在其中添加10年。这将使日期范围(2011-2014年)更加合理。
我发现这个职位有一个非常类似的脚本,我认为我可以借用,但由于某些原因,我似乎无法将它移植到MySQL。
我把它归结为一小块代码。由于某些原因,我的MySQL将不会运行WHILE循环--而我不知道为什么。
USE adventureworks;
CREATE TEMPORARY TABLE ColumnList
(
TableName NVARCHAR (100),
columnName NVARCHAR (100)
);
INSERT INTO ColumnList
select t.table_name,c.column_name
from information_schema.tables t inner join information_schema.columns c on t.table_name=c.table_name
where c.column_type = 'datetime';
SET @Counter = 1;
SET @TotalCount = (SELECT COUNT(*) FROM ColumnList C);
BEGIN
-- do stuff here
@Counter = @Counter + 1;
END
END WHILE;出现的错误:
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHILE @Counter <= @TotalCount DO
BEGIN
-- do stuff here
END
END WHILE' at line 1任何帮助都将不胜感激。
Final Update*下面的答案是正确的,但是如果在任何地方都无意中发现了这个答案,我就找不到答案了,因为我无法在MySQL中构建动态SQL,所以在准备好的语句/等等之前,我无法找到答案。最后,我在我的CodeIgniter应用程序中编写了这个小脚本来处理它。
希望它能帮上忙:
$this->load->database();
$sql = "select t.table_name,c.column_name
from information_schema.tables t inner join information_schema.columns c on t.table_name=c.table_name
where c.table_schema='adventureworks' and c.column_type = 'datetime';";
$columnlist = $this->db->query($sql);
foreach ($columnlist->result_array() as $row)
{
//Now you have list of columns and tables, need to go in to each table, get all
//results and update
$column = $row['column_name'];
$table = $row['table_name'];
$sql =
"select distinct $column as 'thisdate', DATE_ADD($column, INTERVAL 10 YEAR) as 'newdate'
from $table";
$valuelist = $this->db->query($sql);
$results = $valuelist->result_array();
foreach ($results as $value)
{
$thisdate = date ("Y-m-d H:i:s", strtotime($value['thisdate']));
$newdate = date ("Y-m-d H:i:s", strtotime($value['newdate']));
$updatestmt =
'update '.$table.' set '.$column." = '". $newdate ."' where $column = '".$thisdate."'";
echo $updatestmt;
$this->db->query($updatestmt);
echo ' -- rows affected '.$this->db->affected_rows().'<br/>';
}
}发布于 2012-07-18 16:38:51
只能在存储过程、函数或触发器中使用while循环。
您的代码片段似乎不是任何此类sp或触发器的一部分。
这就是错误。
请参考https://dev.mysql.com/doc/refman/5.6/en/while.html了解更多详细信息。
发布于 2012-07-18 16:29:46
UPDATE mytable SET mydate = DATE_ADD(mydate, INTERVAL 10 YEAR)发布于 2012-07-18 16:38:23
或者在开始结束后添加一个分隔符?
WHILE @Counter <= @TotalCount DO
BEGIN
-- do stuff here
END;
END WHILE;第二,记住增加@计数器。
https://stackoverflow.com/questions/11545996
复制相似问题