Mysql CONVERT整数TEXT字段子字符串字符限制

时间:2013-03-06 02:50:21

标签: mysql integer

我有一个简单的数据库,包含1个表和多个字段,其中一个是一个文本字段,它始终具有相同的字母前缀,后跟一个3字符的播放器名称,然后是1到100之间的数字。

文本记录看起来像这样,是LOAD LOCAL INFILE命令的结果,形成第三方应用程序生成的.txt文件。

GRAND CHAMPION MAC 1,180,611,620

TOP ANGLERS 1)MAC 963,956,660 2)MAC 777,545,450 3)MAC 774,563,200 4)MAC 659,721,170

最大的骗局 DVA 6 FISH 4 TALES

TOP BOAT ROCKER 苹果电脑 24摇滚船

使用PHP我试图将DVA之后的数值转换为整数,并从最大到最小排序。我的PHP代码只显示从BIGGEST LIAR到4个故事的块如下。

$data = mysql_query("SELECT * FROM stats WHERE tablestats LIKE '%biggest liar%' ORDER BY CONVERT(SUBSTRING(tablestats, LOCATE('LIAR', tablestats) +5), SIGNED INTEGER),tablestats DESC LIMIT 5;")

or die(mysql_error()); 
while($info = mysql_fetch_array( $data )) 
{ 
echo substr($info['tablestats'],151,40);
Print "<br>";
} 
?>

这将生成一个页面,其中包含我正在寻找的文本,最终呈现为

BIGGEST LIAR DVA 6 FISH 4 TALES

但是,如果有多个记录,其中3个字符用户名后面的变量发生了变化,那么使用DESC进行排序似乎无法正常工作。我注意到当数字是单数(1到9)时似乎没问题但是如果值超过10则是一个记录为6而另一个为10的实例导致在10之前列出6个。

我在这里要做的是在3个字符的用户名之后指定一个空格后面的数值,考虑到这里的数字可能是1到100,然后将其转换为整数和顺序。

非常感谢任何帮助,

贝。

1 个答案:

答案 0 :(得分:0)

我认为你可能会考虑使用这样的东西:

SELECT *, 
  CONVERT(
     SUBSTRING(tablestats, 
               LOCATE('LIAR ', tablestats) + LENGTH('LIAR ') + 4), 
     SIGNED INTEGER)
FROM stats 
WHERE tablestats LIKE '%biggest liar%' 
ORDER BY 2 DESC

SQL Fiddle Demo

在这种情况下使用您的搜索字符串LIAR,并为您的语句添加4个字符 - 字符名称始终为3个字符。如果不是这样,您可以再次使用LOCATE来查找下一个空格。

BTW - 使用像这样的CONVERT方法在其他RDBMS中不起作用。 MySQL将它找到的数值转换为第一个非数字值。因此,您无需在转换之前删除其余字符串。