2013-11-18 3 views
0

Я хочу, чтобы скопировать строку из одной таблицы, формат его в формат даты и поместить его в другой table.I попытался это -копирование данных из одной таблицы, форматировать его на другой

$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); 

Какой оленья кожа создавать любые коды ошибок, но также не копируют данные. Я знаю, что мои исходные данные в порядке, поскольку мне удалось преобразовать их перед использованием другого кода. Благодаря

+1

Выполнить код SQL непосредственно, а не в сценарии, и посмотреть, что происходит. Если все равно ничего, выполните простой SELECT и убедитесь, что данные возвращаются. – Flimzy

ответ

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'); 
+0

Он действительно работает, спасибо. Я не понимаю, почему мне нужно добавить date_holding_table в UPDATE, хотя! Огромное спасибо вам всем. – user3006586

+0

Вам нужно будет указать все задействованные таблицы. Мой синтаксис верен, но кажется, что 'STR_TO_DATE', вероятно, возвращает« NULL »по какой-то причине, с которой вам нужно будет сначала обратиться. – Uours

+0

О, извините, я пропустил прочтение, что он не работает и обновил мой ответ. Однако я рад, что это сработало. – Uours

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 
+0

Он явно использует mysql, основанный на вызове mysqli_query(), нет? – Flimzy

+0

Теперь ясно, что вопрос был помечен правильно. –

1

Неверный формат синтаксиса multi-table UPDATE для MySQL. Ссылки на таблицы должны идти до 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 демо

Смежные вопросы