2

考虑数据库中的表类别,其列 typeis。数据类型是带值的 varchar

         typeis
         ------
         2.5.1
         12
         1.1.1
         11
         letters12
         .........

我想编写一个只返回带有“。”的记录的查询。和从 0-9 的数字

例如

         2.5.1
         1.1.1

到目前为止,我有

       select typeis from category where typeis
       not in 
       (select typeis from category where typeis REGEXP  '[^0-9 \.]+')
       and typeis in
       (select typeis from category where typeis REGEXP  '^[0-9]+[\.]')

这似乎有效。问题是仅 1500 条记录就需要 3 秒以上的时间。我想用一个 REGEXP 让它更简单更快,而不是嵌套选择

4

2 回答 2

6

尝试:^[0-9]+\.[0-9]+(\.[0-9]+)*

这应该匹配以数字开头的事物,包括中间某处的点,以数字结尾,以及尽可能多的这些模式。

于 2013-01-15T17:56:09.903 回答
1

这非常简单且功能强大:

^([0-9]+\.*)+

查询时间问题可能是由没有索引引起的。尝试索引typeis列 - 如果可能的话,创建一个完整长度的索引。例如,如果您使用 varchar(255) 创建长度为 255 的索引,例如:

create index index_name on table_name (column_name(length))
于 2013-01-15T18:09:59.157 回答