首页 > 解决方案 > 使用 CAST 操作的 SQL 中的变量类型案例

问题描述

我正在尝试在 SQL 中使用 CAST 操作从 VARCHAR 中获取有符号整数结果。

但我得到与结果相同的值,而不是有符号整数值。

例如:

如果值为 65520,我正在通过CAST( '65520' AS SIGNED INT)在我的选择查询中使用来寻找 -16 的结果。但我再次得到相同的值 65520。

有没有其他方法可以使用 SQL 将 VARCHAR 转换为 SIGNED INT。

SQL查询:

SELECT CAST('65520' AS SIGNED INT);

标签: mysqlxampp

解决方案


从您的问题听起来好像您正在尝试将无符号整数转换为有符号整数,这将导致在为数字的实际符号删除符号位之后将该值映射到某个负值。首先,MySQL 的整数类型范围是 -2147483648 到 2147483647,所以你使用的测试值无论如何都会太小而看不到,即使它可能发生,它也不能。

SMALLINT类型确实具有 0 到 65535 的无符号范围和 -32768 到 32767 的有符号范围。但是,不能使用CASTCONVERT将值强制转换为 a SMALLINT。您可以做的最好的事情是强制转换为SIGNEDor UNSIGNED,但这将再次使用整数类型。

出于教育目的,我还尝试创建一个带有签名SMALLINT列的表,然后插入该值65520以查看会发生什么。结果? Out of range value for column 'col' at row 1. 所以,我们也不能使用这个选项来获得你想要的行为。

演示


推荐阅读