mysql的varchar转换int

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的varchar转换int相关的知识,希望对你有一定的参考价值。

表中有一字段是varchar类型,但是都是存的数字,比如,1,5,20,30之类,我现在order by这个字段,但是结果并不是按照数字的大小顺序排的,有什么办法能在写sql语句时让这个字段转换成int后排序么。不要说什么cast,convert,这些我都试过,不能用,只能在char和int之间转换。
这位仁兄解决了我的大问题啊,我写的是cast(name,int)为什么不行啊,写signed是啥意思

参考技术A +0咯

比如:`server_id` varchar(2) NOT NULL default '',
手动转化类型:
select server_id from cardserver where game_id = 1 order by server_id+0 desc limit

楼主说cast,convert不行 这应该不可能 不知道楼主的用法用对了么?
使用mysql函数CAST/CONVERT:
select server_id from cardserver where game_id = 1 order by CAST(server_id as SIGNED) desc limit 10;

select server_id from cardserver where game_id = 1 order by CONVERT(server_id,SIGNED) desc limit 10;

问题补充:
不是用cast(name,int)
cast的用法不是这样的
cast跟convert的用法如下 呵呵 这个可以参考资料 希望楼主查阅相关资料你就会知道拉
signed 后面还有个INTEGER 可以不写的 呵呵
用CAST函数或者CONVERT

CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)

CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。

这个类型 可以是以下值其中的 一个:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

试过了是正确的
希望对您有所帮助本回答被提问者采纳

从 VARCHAR 转换为 INT - MySQL

【中文标题】从 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)

以上是关于mysql的varchar转换int的主要内容,如果未能解决你的问题,请参考以下文章

mysql - varchar类型与数字的比较和转换

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

oracle转Mysql中,varchar2(10)和number应该转换为什么类型? (转)

从 VARCHAR 转换为 INT - MySQL

如何将数据类型varchar转换为时间戳mysql?

mysql的varchar转换int