首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在MySQL查询中将文本转换为数字

在MySQL查询中将文本转换为数字
EN

Stack Overflow用户
提问于 2011-05-11 15:18:54
回答 12查看 588.8K关注 0票数 154

可以在MySQL query中将文本转换为数字吗?我有一个列,它的标识符由名称和数字组成,格式为" name - number“。该列的类型为VARCHAR。我想要按数字对行进行排序(同名的行),但列是按do字符顺序排序的,即

代码语言:javascript
复制
name-1
name-11
name-12
name-2

如果我切断了数字,我可以将'varchar‘数字转换为'real’数字,并使用它对行进行排序吗?我想获得以下订单。

代码语言:javascript
复制
name-1
name-2
name-11
name-12

我不能将数字表示为单独的列。

编辑2011-05-11 9:32

我找到了以下解决方案... ORDER BY column * 1。如果名称不包含任何数字,那么使用该解决方案是否安全?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2011-05-11 15:28:58

这应该是可行的:

代码语言:javascript
复制
SELECT field,CONVERT(SUBSTRING_INDEX(field,'-',-1),UNSIGNED INTEGER) AS num
FROM table
ORDER BY num;
票数 280
EN

Stack Overflow用户

发布于 2011-05-11 15:27:38

您可以使用SUBSTRINGCONVERT

代码语言:javascript
复制
SELECT stuff
FROM table
WHERE conditions
ORDER BY CONVERT(SUBSTRING(name_column, 6), SIGNED INTEGER);

其中,name_column是具有"name-“值的列。SUBSTRING会删除第六个字符(即"name-“前缀)之前的所有内容,然后CONVERT会将剩下的字符转换为一个实数。

更新:考虑到注释中不断变化的情况(即前缀可以是任何东西),您必须在混合中抛出一个LOCATE

代码语言:javascript
复制
ORDER BY CONVERT(SUBSTRING(name_column, LOCATE('-', name_column) + 1), SIGNED INTEGER);

当然,这假设非数字前缀中没有任何连字符,但相关注释说:

name可以是任何字母序列

因此,这应该是一个安全的假设。

票数 36
EN

Stack Overflow用户

发布于 2016-11-16 13:23:18

只需使用强制转换,

代码语言:javascript
复制
CAST(column_name AS UNSIGNED)

强制转换结果的类型可以是下列值之一:

代码语言:javascript
复制
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL[(M[,D])]
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5960620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档