[英]Subtract number from enum
我在data
表中的number
列具有枚举值:
1, 2, 3, 4, 5, 101, 102, 103, 104, 105
我想使用查询为所有行设置number = number - 100
的值:
UPDATE data SET data.number = (data.number - 100) WHERE data.number > 100
但它不适用于枚举数据。
您只能对基数(整数、浮点数、双精度、小数、日期)进行算术运算。 枚举数据类型是名义上的。
您可以尝试在 SQL 中进行转换,但如果可以执行此操作,则问题是您选择了错误的数据类型。
您专门使用数字来表示状态应该是一个危险信号。
但它不适用于枚举数据。
当然。 ENUM 数据类型的字符串值不是存储在表数据体中的值——它仅包含值的 2 字节索引,并且根据字符串值列表存储在表定义区域中,无法通过任何 DML 操作更改。 只有 DDL (ALTER TABLE) 可以更改 ENUM 值字符串表示定义。
发布的查询会将data.number
视为索引值 - 因此您必须得到错误(源值为 1-10,最终值为负数,而 ENUM 索引值为 UNSIGNED)。
这有点复杂。
Mysql 不允许从 ENUM 转换数字,因为上面说数字不应该用作ENUM 值。
但是如果您需要 ENUM 字段的值,您可以将其转换为字符。
最后一步是将该文本转换为数字。
架构(MySQL v5.7)
CREATE TABLE IF NOT EXISTS `data` (
number ENUM('1', '2', '3', '4', '5', '101', '102', '103', '104', '105')
) ;
INSERT INTO `data` VALUES ( '103');
UPDATE `data` SET number = CAST(CAST(`number` AS CHAR) AS UNSIGNED) - 100 WHERE CAST(CAST(`number` AS CHAR) AS UNSIGNED) >= 100;
查询 #1
SELECT * FROM `data`;
| number |
| ------ |
| 3 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.