从 VARCHAR 转换为 INT - MySQL

Posted

技术标签:

【中文标题】从 VARCHAR 转换为 INT - MySQL【英文标题】:Cast from VARCHAR to INT - MySQL 【发布时间】:2012-08-21 01:21:02 【问题描述】:

我的当前数据

SELECT PROD_CODE FROM `PRODUCT`

PROD_CODE
2
5
7
8
22
10
9
11

我已经尝试了所有四个查询,但都没有工作。 (Ref)

SELECT CAST(PROD_CODE) AS INT FROM PRODUCT;

SELECT CAST(PROD_CODE AS INT) FROM PRODUCT;

SELECT CAST(PROD_CODE) AS INTEGER FROM PRODUCT;

SELECT CAST(PROD_CODE AS INTEGER) FROM PRODUCT;

所有抛出语法错误如下:

您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册以获取正确的语法使用 在第 1 行靠近 ') AS INT FROM PRODUCT LIMIT 0, 30'

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在第 1 行的 'INTEGER) FROM PRODUCT LIMIT 0, 30' 附近

在 MySQL 中将 varchar 转换为整数的正确语法是什么?

MySQL 版本:5.5.16

【问题讨论】:

每次尝试报告什么错误?你的输入是什么?如果对结果集中的任何记录进行强制转换失败,则 supposed 会使查询失败。至少,这就是 sql 标准所说的,尽管 MySql 因违反标准中的安全规则而臭名昭著。而且,记录在案,第 2 和第 4 个列出的样本是正确的。 【参考方案1】:

如Cast Functions and Operators中所述:

结果的类型可以是以下值之一:

BINARY[(N)] CHAR[(N)] DATE DATETIME DECIMAL[(M[,D])] SIGNED [INTEGER] TIME UNSIGNED [INTEGER]

因此,您应该使用:

SELECT CAST(PROD_CODE AS UNSIGNED) FROM PRODUCT

【讨论】:

未签名正在工作。 MySQL 从什么时候开始将 Integer 数据类型更改为 Unsigned? @emaillenin:用于转换的数据类型与用于列的数据类型不同,因为需要有关如何解释数据的其他信息,例如整数是否带符号。 感谢您提供此信息。 MySQL 文档对我来说很混乱,所以这很有帮助。 请注意,在 MariaDB CAST(PROD_CODE AS INT) works 上就好了。 @bsplosion:我不反对。已有open feature requests since at least 2014 将AS INT 视为AS SIGNED【参考方案2】:

对于将 varchar 字段/值转换为数字格式可能有点小技巧:

SELECT (`PROD_CODE` * 1) AS `PROD_CODE` FROM PRODUCT`

【讨论】:

当有一个简单的、记录的、受支持和推荐的解决方案时,为什么还要使用这样的“hack”? @eggyal TL;DR: 您提到的“黑客”是一个简单、有文档且推荐的解决方案。 - - - - - - - - - - - - 长版:来自the manual:To cast a string to a number, you normally need do nothing other than use the string value in numeric context 虽然我会使用+0 而不是*1,因为加法更快。 @BrianStinar 接受的答案清楚地表明存在具有更好语义的解决方案,但有时将原始值隐式转换为另一个原始值只是方便,尤其是在组合字符串和数字类型时。因此,为了这个特性的存在而随意抨击编程语言似乎相当不合适。 不要使用这些类型的黑客! - 非常糟糕的做法,当代码充满这些并且难以恢复时,会在很久以后反击 有了这个答案,我发现有时会以 float64 结尾,这就是为什么我更喜欢使用CONVERT('123456',UNSIGNED INTEGER)

以上是关于从 VARCHAR 转换为 INT - MySQL的主要内容,如果未能解决你的问题,请参考以下文章

在 MySQL 中将 int 转换为 varchar 数据类型

mysql 把int转换为varchar怎么实现

MySQL类型转换 使用CAST将varchar转换成int类型排序

SQL表单提示"从数据类型varchar转换为int时出错"

mysql的varchar转换int

(转)mysql数据库中存储数字字段时,选择int和varchar的区别