我已经查看了所有错误 1292 截断错误双值问题,但无法从中得出解决方案。
然而,答案让我做出了一个我无法证明的假设:
我正在使用 MYSQL2 库从 NODEJS 查询 MYSQL。我的名为shoptableplayground 的表包含一个名为regular_price 的列/字段。它具有数据类型属性 VARCHAR(45)。
我想将所有行的所述列/字段的值增加 10%。
我从以下查询中收到错误 1292:
UPDATE shoptableplayground
SET regular_price = regular_price * 1.1 WHERE regular_price BETWEEN 1 AND 200;
我假设我收到错误,因为 WHERE 期望比较数字数据类型(DEC、INT 等)以便能够进行实际比较。
我结合 CONVERT 或 CAST 甚至 ALTER TABLE MODIFY COLUMN 数据类型的各种尝试都会导致 MYSQL 语法错误。不幸的是,大多数教程都涵盖 SELECT 或某种形式的直接数据操作。
我还尝试使用 DECIMAL(10.2) 列作为常规_价格列重建表,但填充过程(在我的控制范围之外)似乎仍然将数据插入为字符串/VARCHAR。
任何有关如何解决问题的查询建议将不胜感激。
首先,将计算出的数字存储为 VARCHAR 类型是一个很大的错误,但我们暂时忽略它。
重点,您有一列包含许多由价格(浮动)填充的行,但它被视为 VARCHAR 列,我们无法对其进行计算。
诀窍是施法两次:
您还可以设置条件来确保价格的区间(0到200之间)
UPDATE shoptableplayground
SET regular_price = CAST(CAST(regular_price AS DECIMAL(10,2)) * 1.1 AS CHAR)
WHERE CAST(regular_price AS DECIMAL(10,2)) BETWEEN 1 AND 200;