mysql - 使用 CAST 操作的 SQL 中的变量类型案例
问题描述
我正在尝试在 SQL 中使用 CAST 操作从 VARCHAR 中获取有符号整数结果。
但我得到与结果相同的值,而不是有符号整数值。
例如:
如果值为 65520,我正在通过CAST( '65520' AS SIGNED INT)
在我的选择查询中使用来寻找 -16 的结果。但我再次得到相同的值 65520。
有没有其他方法可以使用 SQL 将 VARCHAR 转换为 SIGNED INT。
SQL查询:
SELECT CAST('65520' AS SIGNED INT);
解决方案
从您的问题听起来好像您正在尝试将无符号整数转换为有符号整数,这将导致在为数字的实际符号删除符号位之后将该值映射到某个负值。首先,MySQL 的整数类型范围是 -2147483648 到 2147483647,所以你使用的测试值无论如何都会太小而看不到,即使它可能发生,它也不能。
该SMALLINT
类型确实具有 0 到 65535 的无符号范围和 -32768 到 32767 的有符号范围。但是,不能使用CAST
或CONVERT
将值强制转换为 a SMALLINT
。您可以做的最好的事情是强制转换为SIGNED
or UNSIGNED
,但这将再次使用整数类型。
出于教育目的,我还尝试创建一个带有签名SMALLINT
列的表,然后插入该值65520
以查看会发生什么。结果? Out of range value for column 'col' at row 1
. 所以,我们也不能使用这个选项来获得你想要的行为。
演示
推荐阅读
- ios - 使表格视图单元格中的文本字段成为第一响应者
- excel - 需要帮助解决选择框编译错误
- c++ - 如何初始化升压滚动窗口累加器?
- c - 什么是 Unix 中的“whiteout”(S_IFWHT)?
- javascript - 如何在fullCalendar中占据所有的日子?
- javascript - 如何打印多条消息但只有一个聊天应用程序的用户名
- wordpress - 调整 .htaccess 链接后导致重定向过多
- dart - 如何在飞镖中将字符串转换为Uuid
- firebase-authentication - Apple 登录 - 检索姓名和电子邮件
- reactjs - 如何在玩笑测试中共享设置和拆卸?