MySQL переконвертировть валюту

Статус
В этой теме нельзя размещать новые ответы.

01K

Мой дом здесь!
Регистрация
27 Июн 2013
Сообщения
689
Реакции
313
Всем привет!
Есть успешно работающий проект, в базе данных(MySQL) которого накопилось приличное количество важной информации. Среди этой информации есть поля с ценой, представленные структурой:
float(7,2) и float(8,4)

Появилась задача все цены поменять на другую валюту, т.е. каждое значение нужно поделить на коэффициент вида: z.xxxxx: a/z.xxxxx= b.hh (новая валюта с двумя знаками после запятой).

Вопрос, как правильно и каким запросом это сделать?
В итоге нужно получить новые цены с двумя знаками после запятой и в одной из таблиц float(8,4) поменять на float(8,2)
 
1. определить список таблиц - где нужны изменения
2. в каждой такой таблице, для тренировки, создать поле float(8,2)
3. использовать UPDATE вкупе с ROUND чтоб присвоит значение этому полю
Для просмотра ссылки Войди или Зарегистрируйся, Для просмотра ссылки Войди или Зарегистрируйся
Rounds the argument X to D decimal places. The rounding algorithm depends on the data type of X. D defaults to 0 if not specified. D can be negative to cause D digits left of the decimal point of the value X to become zero.
4. сравнить результаты и всё ли нормально

по простому же, сделать все поля 8,4 произвести операции и потом сделать 8,2, зная по тесту, что ничего не потеряется
 
  • Нравится
Реакции: 01K
Т.е. можно смело юзать такой код, заменив SELECT на UPDATE?
Код:
SELECT ROUND(`price1` / 3.45280, 2) AS new_price FROM book_data;
Это для проверки селектил
 
Код:
ALTER TABLE `your_table` CHANGE `price` `price` float(8,2) NOT NULL;
 
Т.е. можно смело юзать такой код, заменив SELECT на UPDATE?
Код:
SELECT ROUND(`price1` / 3.45280, 2) AS new_price FROM book_data;
Это для проверки селектил
просто добавьте новое поле типа new_price и для своей проверки попробуйте
Код:
UPDATE `book_data` SET `new_price` = ROUND(`price1` / 3.45280, 2)

так как, насколько я понимаю, вы не совсем уверены в результате и достаточности знаний, то селайте бекап базы перед этим, чтоб потом не мучаться после неудачных апдейтов. можно будет восстановить первоначальное состояние без каких либо трудностей
 
  • Нравится
Реакции: 01K
Код:
ALTER TABLE `your_table` CHANGE `price` `price` float(8,2) NOT NULL;
С ALTER не сталкивался, вместо второго `price` должно быть примерно так?
Код:
ALTER TABLE `your_table` CHANGE `price` ROUND(`price1` / 3.45280, 2) float(8,2) NOT NULL;
Или тут вложенным запросом надо?

P.S. Получается, что с вариантом от Шумадан останется и старая валюта, что хорошо для истории платежей :)
 
С ALTER не сталкивался, вместо второго `price` должно быть примерно так?
Код:
ALTER TABLE `your_table` CHANGE `price` ROUND(`price1` / 3.45280, 2) float(8,2) NOT NULL;
Или тут вложенным запросом надо?
ALTER меняет структуру таблички, почитайте немного документацию, чтоб немного знаний приобрести. проведите несколько тестов, а потом уже работайте по "боевому"
 
  • Нравится
Реакции: 01K
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху