从一个表复制数据,将其格式化为另一个表

时间:2013-11-18 22:36:38

标签: mysql sql

我想从一个表中复制一个字符串,将其格式化为日期格式并将其放在另一个表中。我试过这个 -

$SQL2 = "UPDATE action_data 
SET date_of_call = STR_TO_DATE(date_holding_table.date_1, '%d/%m/%Y') 
FROM date_holding_table WHERE date_holding_table.id = action_data.id";
$result = mysqli_query($dbc, $SQL2);

哪个不会创建任何错误代码,但也不会复制数据。我知道我的源数据没问题,因为我在使用不同代码之前设法转换它。 感谢

3 个答案:

答案 0 :(得分:1)

  

确保在date_holding_table表格中,date_1列格式为'%d/%m/%Y'格式,否则STR_TO_DATE( date_holding_table.date_1 ,'%d/%m/%Y' )可能会返回NULL并且不会更新任何内容。

STR_TO_DATE

经过测试和工作:

UPDATE
     action_data
    ,date_holding_table
SET
    action_data.date_of_call = STR_TO_DATE( date_holding_table.date_1 ,'%d/%m/%Y' )
WHERE
    date_holding_table.id = action_data.id

测试数据:

-- Table structure for table `date_holding_table`

CREATE TABLE IF NOT EXISTS `date_holding_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date_1` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;

-- Dumping data for table `date_holding_table`

INSERT INTO `date_holding_table` (`id`, `date_1`) VALUES
(1, '1/5/2013'),
(2, '20/4/2004');

-- Table structure for table `action_data`

CREATE TABLE IF NOT EXISTS `action_data` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date_of_call` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;

-- Dumping data for table `action_data`

INSERT INTO `action_data` (`id`, `date_of_call`) VALUES
(1, '0000-00-00 00:00:00'),
(2, '0000-00-00 00:00:00');

运行我的UPDATE查询后:

  

影响了2行。

-- Dumping data for table `action_data`

INSERT INTO `action_data` (`id`, `date_of_call`) VALUES
(1, '2013-05-01 00:00:00'),
(2, '2004-04-20 00:00:00');

答案 1 :(得分:1)

MySQL的multi-table UPDATE语法不正确。表引用应该在SET子句之前。试试这种方式

UPDATE action_data a JOIN date_holding_table d
    ON a.id = d.id
   SET a.date_of_call = STR_TO_DATE(d.date_1, '%d/%m/%Y')

这是 SQLFiddle 演示

答案 2 :(得分:0)

我真的很惊讶你没有收到错误。您没有指定数据库引擎,但大多数都支持此语法。

update action_data
set date_of_call = STR_TO_DATE(date_holding_table.date_1, '%d/%m/%Y') 
from action_data join date_holding_table on date_holding_table.id = action_data.id