2013-07-27 2 views
-1

У меня есть таблица со следующей схемой.Как обновить столбец, используя значение другого столбца с условием?

meta_id meta_key meta_value 
1   key1   5 
2   key2  sometext 
3   key3  serialized_text 
4   key4   8 

Теперь я добавил четвертый столбец моей таблице как «Числовое представление» в meta_value колонке из соображений производительности. Но я должен обновить существующие данные. Вот как мне это нужно.

meta_id meta_key meta_value   num_value 
1   key1   5      5 
2   key2  sometext    NULL 
3   key3  serialized_text  NULL 
4   key4   8      8 

В общем мне нужен запрос, чтобы обновить четвертый столбец, только если meta_value это число. Я знаю, как обновить столбец на основе другого столбца. Условием является частью я заинтересован в
Благодаря

+0

Странно, что я не могу изменить свой вопрос. Я попал на страницу ошибок 404! –

+0

Что такое тип данных для столбца 'num_value'? – peterm

+0

Это 'INT' с длиной 32 цифры. –

ответ

1

Попробуйте

UPDATE Table1 
    SET num_value = meta_value * 1 -- or just meta_value 
WHERE meta_value REGEXP '^[-]?[0-9]+$' 

Вот SQLFiddle демо

+0

Спасибо, но он обновил все записи, а не только числовые. –

+0

@HamedMomeni Я обновил шаблон в ответе, чтобы убедиться, что значение содержит только цифры и запятую. См. Обновленный ответ и демоверсию sqlfiddle. Вы можете вырезать запятую из регулярного выражения, если не ожидаете каких-либо десятичных значений в 'meta_value', которые должны быть преобразованы в int в вашем обновлении. – peterm

+0

Также могут быть отрицательные числа. Поэтому я думаю, что шаблон должен быть '^ ([-]?) [0-9] + $'. –

1

Просто:.

UPDATE table 
    SET meta_value = null 
WHERE meta_value not regexp '^[0-9]+$'; 

Посмотрите на демо here

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