可以在MySQL query中将文本转换为数字吗?我有一个列,它的标识符由名称和数字组成,格式为" name - number“。该列的类型为VARCHAR。我想要按数字对行进行排序(同名的行),但列是按do字符顺序排序的,即
name-1
name-11
name-12
name-2
如果我切断了数字,我可以将'varchar‘数字转换为'real’数字,并使用它对行进行排序吗?我想获得以下订单。
name-1
name-2
name-11
name-12
我不能将数字表示为单独的列。
编辑2011-05-11 9:32
我找到了以下解决方案... ORDER BY column * 1
。如果名称不包含任何数字,那么使用该解决方案是否安全?
发布于 2011-05-11 15:28:58
这应该是可行的:
SELECT field,CONVERT(SUBSTRING_INDEX(field,'-',-1),UNSIGNED INTEGER) AS num
FROM table
ORDER BY num;
发布于 2011-05-11 15:27:38
SELECT stuff
FROM table
WHERE conditions
ORDER BY CONVERT(SUBSTRING(name_column, 6), SIGNED INTEGER);
其中,name_column
是具有"name-“值的列。SUBSTRING
会删除第六个字符(即"name-“前缀)之前的所有内容,然后CONVERT
会将剩下的字符转换为一个实数。
更新:考虑到注释中不断变化的情况(即前缀可以是任何东西),您必须在混合中抛出一个LOCATE
:
ORDER BY CONVERT(SUBSTRING(name_column, LOCATE('-', name_column) + 1), SIGNED INTEGER);
当然,这假设非数字前缀中没有任何连字符,但相关注释说:
name
可以是任何字母序列
因此,这应该是一个安全的假设。
发布于 2016-11-16 13:23:18
只需使用强制转换,
CAST(column_name AS UNSIGNED)
强制转换结果的类型可以是下列值之一:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL[(M[,D])]
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
https://stackoverflow.com/questions/5960620
复制相似问题