【发布时间】:2019-02-11 20:09:05
【问题描述】:
我有一个使用CHAR 作为客户主键的表。我正在尝试将此表加载到架构中,以便主键应该是INT。
DROP TABLE IF EXISTS `customers`;
CREATE TABLE `customers` (
`customer_id` char(5) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `customers` VALUES ('99944'),('99946'),('99976'),('A0014'),('A0049'),('A0124'),('C01AH'),('C01AQ'),('C01AW'),('C01AX'),('C01AY'),('C01AZ');
我尝试了对select cast(customer_id AS UNSIGNED) FROM customers; 的变体,但只为非整数行返回 0。如何将非 int 行转换为一致的 INT 结果?
理想的结果应该是这样的: 对于完全是整数的客户 ID,请不要理会它们。 对于包含任何字母的客户 ID,请将 ID 中的所有内容替换为唯一的数字标识符。
预期结果:
SELECT * FROM Customers;
`customer_id`
-------
99944
99946
99976
13871911
13871912
13871913
13872128
13872229
13872293
13872505
13872512
13872561
【问题讨论】:
-
你想要什么结果?
-
总是第一个字符不是数字吗?这些 ID 当前是否映射到另一个表,因此需要一致的转换?
-
没有。第一个字符可以是数字或非数字。这些 ID 将映射到另一个表,因此需要保持一致性。对于数字 ID,请保持原样。对于非数字 ID,返回一致的结果 - 例如,用十进制 ASCII 代码替换非数字字符。
-
我建议您将预期结果作为格式化数据。如何做到这一点你可以在这里阅读Why should I provide an MCVE for what seems to me to be a very simple SQL query?
-
嘿@RaymondNijland...我开始喜欢你的解决方案了!
标签: mysql sql char type-conversion mariadb