Main menu

Недавно мне понадобилось скопировать данные в таблице MySQL в несколько полей, однако не простым копированием, а с округлением чисел к большему. В этой статье Я рассмотрю вариант обычного копирования данных из поля в поле, а так же копирование чисел с их округлением к большему значению на лету, во время самого копирования. Хотя статьей эту заметку назвать трудно, но возможно она будет полезна ;)

Итак предисловий тут и не может быть, перейдем непосредственно к делу. Копирование данных из поля в поле в пределах одной таблицы довольно просто выполняется. Для этого нужно выполнить данный SQL запрос:

UPDATE `table_name` SET `COL2`=`COL1`

Тут у нас table_name - это соответственно имя таблицы. Далее COL2 это новое поле, в которое мы копируем данные. Затем идет COL1, это старое поле, из которого копируются данные в новое поле. Собственно здесь все довольно просто, главное не перепутать имена полей.

Но мне нужно было скопировать данные из одного поля в другое, округлив их до целых чисел к большему значению, а по умолчанию MySQL при копировании данных округляет значения (если указаны соответствующие свойства поля) по всем правилам математики, то есть при 6 и более десятых округление к большему значению, а при 5 и менее десятых округление к меньшему значению, что в принципе правильно.

Однако, если нужно при копировании данных округлить все десятые и сотые к большему, целому значению (то есть при копировании 25.3 должны получить 26), нужно выполнить следующий SQL запрос:

UPDATE TABLE_NAME SET COL2=(CEIL(COL1))

Тут почти все тоже самое, что и в первом случае - имя таблицы, имя поля, в которое копируем данные. Но потом мы добавляем параметр CEIL, который и выполняет функцию округления чисел до целых к большему значению. Так мы получим старое поле, со старыми значениями и новое, с округленными числами к большему значению.

Кстати если старое поле было к примеру текстовым, а новое валютное может возникнуть проблема со знаками, разделяющие десятичные значения. То есть при копировании MySQL может обрезать все, что было после запятой, так как разделителем в другом поле может служить точка. В общем с этими точками и запятыми так же могут возникнуть проблемы. И если Вы уверены, что при копировании возникает проблема из за неправильного разделителя десятичных значений, можно в старом поле заменить одни на другие. Следующий MySQL запрос заменяет в определенном поле все запятые на точки:

UPDATE `table_name`SET `field_name`= REPLACE(`field_name`, ',', '.')

Это позволит избежать проблем при последующем копировании данных если конфликт именно в знаках разделяющий десятичные значения.