mysql查询出的数据转换为数字,关于sql:在MySQL查询中将文本转换为数字

是否可以在MySQL查询中将文本转换为数字? 我有一列带有标识符的列,该标识符由名称和数字组成,格式为"名称-数字"。 该列具有VARCHAR类型。 我想根据数字(具有相同名称的行)对行进行排序,但是根据do字符顺序对列进行排序,即

name-1

name-11

name-12

name-2

如果我减少了数字,是否可以将" varchar"数字转换为"真实"数字并用它对行进行排序? 我想获得以下订单。

name-1

name-2

name-11

name-12

我无法将数字表示为单独的列。

编辑2011-05-11 9:32

我发现以下解决方案... ORDER BY column * 1。 如果名称中不包含任何数字,是否可以保存使用该解决方案?

名称完全是名称,也可以是任何字符? 我的意思是:它是一个字符串,长度为四个字符还是真名?

name可以是任何字母序列。

mysql自然排序的可能重复项

这应该工作:

您可以添加说明和文档链接吗?

我的字符串就像" name-abc12"。通过添加您的代码,它仅在"-"之后的初始字符不以字母开头时才有效。 @Marco您能告诉我一种无条件条件下忽略字母的方法吗?

@Eduardo我的查询应该在"-"之后获取字符串,并将其转换为数字(必须为数字)。就您而言,Id可能继续使用正则表达式...

@Marco正则表达式做到了,谢谢您的提示。

您可以使用SUBSTRING和CONVERT:

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

更新:鉴于注释中环境的变化(即前缀可以是任何东西),您必须在组合中添加LOCATE:

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

name can be any sequence of letters

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

在回答我的评论时,他告诉我们名称可以是任何字符序列,因此我不确定您可以使用SUBSTRING(name_column, 6)。我知道,当他没有告诉我们这件事时,您就张贴了它。

@Marco:感谢您的注意,我添加了一个更新,该更新应注意有关前缀的新信息。但是,是的,您的SUBSTRING_INDEX更好。

只需使用CAST,

CAST(column_name AS UNSIGNED)

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

您可以使用CAST()从字符串转换为int。例如SELECT CAST('123' AS INTEGER);

该版本特定吗?我需要使用SELECT CAST(123 AS SIGNED INTEGER);或SELECT CAST(123 AS UNSIGNED INTEGER);使其正常工作。

您确定ORDER BY使用num作为数字而不使用CONVERT吗?我不确定,但是可以。.我只是问自己:)

一种简单的方法SELECT'123'+ 0

尽管此代码可能有助于解决问题,但是提供有关为什么和/或如何回答问题的其他上下文将显着提高其长期价值。请编辑您的答案以添加一些说明。

这没有回答问题,但这是我一直在寻找的答案。

您的解决方案是最优雅,最实用的解决方案-不幸的是,您没有在问题的上下文中提供给定示例的特定表达方式-请对其进行修改以使其更加具体。

如果您的主键是格式如下的字符串

ABC / EFG / EE / 13/123(序列号)

这种字符串可以很容易地用delimiter(" /")进行排序

我们可以使用以下查询来订购具有此类键的表

要获取数字,请尝试使用SUBSTRING_INDEX(field, '-', 1),然后进行转换。

您需要将1更改为-1。 dev.mysql.com/doc/refman/5.0/en/

通用方法:

SELECT * FROM your_table ORDER BY LENTH(your_column) ASC, your_column ASC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值