表设计:
city_id int(10)
city_names varchar(20)
flash_ids varchar(20)===============================
部分记录 :
-----------------------------------------
'10'  ,  '武汉'  ,  '10,2,57,'
'1'   ,  '北京'  ,  '1,14,584,22,'
'897' ,  '鞍山'  ,  ',56'
'8'   ,  '广州'  ,  ''
'89'  ,  '深圳'  ,  '12,'-----------------------------------------数据中只有两种情况的数据是正确的。
一种是flash_ids的值为空,另外一种是就是如果不为空,那么数字之间使用逗号隔开(假如里面的数字个数大于1个的话)
我现在就是需要得到的那种正确的格式的数据,我使用的SQL语句如下:
SELECT *
FROM tb
WHERE `flash_ids` REGEXP '^([1-9][0-9]),*([1-9][0-9])$'
LIMIT 0 , 30 但是无法得到我想要的那种结果,如何才可以实现。

解决方案 »

  1.   


    mysql> select * from t_default7;
    +---------+------------+--------------+
    | city_id | city_names | flash_ids    |
    +---------+------------+--------------+
    |      10 | 武汉       | 10,2,57,     |
    |       1 | 北京       | 1,14,584,22, |
    |     897 | 鞍山       | ,56          |
    |       8 | 广州       |              |
    |      89 | 深圳       | 12,          |
    |     102 | 杭州       | 10,12,120    |
    |      45 | 苏州       | ,,1,1001,,   |
    +---------+------------+--------------+
    7 rows in set (0.00 sec)mysql> select * from t_default7
        -> where flash_ids regexp '^([0-9]+,)*[0-9]+$'
        -> or flash_ids=''
        -> or flash_ids is null;
    +---------+------------+-----------+
    | city_id | city_names | flash_ids |
    +---------+------------+-----------+
    |       8 | 广州       |           |
    |     102 | 杭州       | 10,12,120 |
    +---------+------------+-----------+
    2 rows in set (0.00 sec)mysql>