Portál AbcLinuxu, 8. května 2025 13:59
`id` autoincrement `c1` double `c2` doublec1 = 605.5 mysql/mariadb konzoli:
select round(605.5); +--------------+ | round(605.5) | +--------------+ | 606 | +--------------+ select round(c1) from t1; +--------------+ | round(c1) | +--------------+ | 606 | +--------------+pridam proceduru
CREATE DEFINER=`root`@`localhost` PROCEDURE `t1_update_c2` (IN `myid` int(11)) MODIFIES SQL DATA BEGIN UPDATE `t1` SET `c2` = ROUND(`c1`) WHERE `id`=myid; ENDa pokud ji pres trigger zavolam, v c2 mam 605 - tedy zaokrouhleni DOLU spravne to funguje az pokud tu proceduru napisu takhle:
CREATE DEFINER=`root`@`localhost` PROCEDURE `t1_update_c2` (IN `myid` int(11)) MODIFIES SQL DATA BEGIN UPDATE `t1` SET `c2` = CAST(`c1` AS DECIMAL) WHERE `id`=myid; ENDdelam neco spatne ja, nebo je to na bugreport?
mysql> create table t (id int, c1 double, c2 double); Query OK, 0 rows affected (0.03 sec) mysql> insert into t (id, c1) values (1, 605.5); Query OK, 1 row affected (0.10 sec) mysql> select * from t; +------+-------+------+ | id | c1 | c2 | +------+-------+------+ | 1 | 605.5 | NULL | +------+-------+------+ 1 row in set (0.00 sec) mysql> select round(c1) from t where id = 1; +-----------+ | round(c1) | +-----------+ | 606 | +-----------+ 1 row in set (0.00 sec) mysql> update t set c2 = round(c1) where id = 1; Query OK, 1 row affected (0.03 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from t where id = 1; +------+-------+------+ | id | c1 | c2 | +------+-------+------+ | 1 | 605.5 | 606 | +------+-------+------+ 1 row in set (0.00 sec)D.
DELIMITER // CREATE DEFINER=`root`@`localhost` PROCEDURE `round_double` (IN `cislo` double) BEGIN SELECT ROUND(`cislo`); END // DELIMITER ; call round_double(6.5);vrati 6
DELIMITER // CREATE DEFINER=`root`@`localhost` PROCEDURE `round_decimal` (IN `cislo` decimal(10, 2)) BEGIN SELECT ROUND(`cislo`); END // DELIMITER ; call round_decimal(6.5);vrati 7 cili typy double, float v procedure zaokrouhli spatne, typ decimal spravne. Ale JENOM v procedure.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.