从VARCHAR转换为INT-MySQL


267

我当前的数据

SELECT PROD_CODE FROM `PRODUCT`

PROD_CODE
2
5
7
8
22
10
9
11

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

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语法有误;在第1行的“ INTEGER)FROM PRODUCT LIMIT 0,30”附近检查与您的MySQL服务器版本相对应的手册以使用正确的语法

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

MySQL版本:5.5.16


每次尝试报告什么错误?你有什么投入?它认为,如果投在结果集中的任何记录失败时失败的查询。至少,这就是sql标准所说的,尽管MySql因违反标准中的安全规则而臭名昭著。并且,作为记录,列出的第二和第四样本是正确的。
Joel Coehoorn

Answers:


552

强制转换函数和运算符中所述

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

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

因此,您应该使用:

SELECT CAST(PROD_CODE AS UNSIGNED) FROM PRODUCT

7
未签名正在工作。MySQL从什么时候起将Integer数据类型更改为Unsigned?
列宁·拉杰·拉贾塞卡兰(Linin Raj Rajasekaran),2012年

20
@emaillenin:用于转换的数据类型与用于列的数据类型不同,因为需要有关如何解释数据的附加信息,例如,是否对整数进行符号化。
eggyal

13
感谢您提供此信息。MySQL文档对我来说很混乱,所以这很有帮助。
Racky

我遇到了CAST(num_col AS DOUBLE(10,2)..的问题。后来我将其更改为DECIMAL(10,2),并且它起作用了。Tnanks
Nava Bogatee

请注意,在MariaDB上CAST(PROD_CODE AS INT) 工作正常。
Paul Spiegel

56

要将varchar字段/值转换为数字格式,可以使用很少的技巧:

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

9
如果有一个简单,有文档,受支持和推荐的解决方案,为什么有人会使用这种“ hack”?
eggyal '16

31
@eggyal TL; DR:您提到的“ hack”是一个简单明了的,有文档推荐的解决方案。- - - - - - - - - - - - - 长的版本:从手册To cast a string to a number, you normally need do nothing other than use the string value in numeric context虽然我会使用+0,而不是*1因为除了速度更快。
Mindwin '16

8
@BrianStinar接受的答案清楚地表明存在具有更好语义的解决方案,但是有时将一个原始值隐式转换为另一个原始值是很方便的,尤其是在组合字符串和数字类型时。因此,为该功能的存在而随意抨击编程语言似乎是不合适的。
B12Toaster

不要使用这些类型的骇客!-非常不好的做法,将咬回来晚得多,当代码充满了这些,很难恢复
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.