2014-09-30 34 views
0

我有字段,有值类型store878。我想从select语句中获得878个。我如何从select语句数如何只从字符串字段获得数字mysql

select 
    store, 
    address 
from 
    detail, 
    store_number 
where 
    store (here i would like to have number) = store_mumber.id 
+2

您的数据库设计错误。您应该使用带有ID的“商店”表格,而不是单独编号的商店字段。 – 2014-09-30 20:52:27

+0

这简直太难看了。任何答案都不能解决根本问题。 – Linger 2014-09-30 20:53:21

+0

如果你必须有字母数字......并假设文本/数字有一个固定长度,然后尝试获取字符串的一部分来分割出来。无论如何,我投给罗伯特H.建议。 – NKD 2014-09-30 20:55:03

回答

1

我没有测试是为了确保是作品:

SELECT store, address 
FROM detail d 
INNER JOIN store_number s 
    ON CAST(SUBSTRING(d.store, LOCATE('%[0-9]%', d.store)) AS int) = s.id 

但你真的应该考虑改变你的数据库的结构。

+0

不幸的是,'LOCATE()'只执行固定字符串匹配,而不是通配符或类似于正则表达式的匹配。然而,你的回答确实激励着我想出一个可行的选择,尽管它仍然是一个非常糟糕的主意,正如你所说的那样。如果数字在字符串的末尾,那么检查以下结果:'SELECT CAST(REVERSE(CAST(REVERSE('haxor1337')AS UNSIGNED))AS UNSIGNED);'它的行为如预期的(在此返回'1337'案件)。尽管如此,设计的根本问题应该得到解决。 – 2014-09-30 23:39:24