1

我在 Varchar 列中有一些文本,它总是以一些数字结尾,例如:

abc12
xy2
asdf876
qwerty32

我需要选择这些数字大于某个数字 x 的值,例如如果x = 20,结果应该是:

asdf876
qwerty32

我可以在 MySQL 中执行此操作吗?任何帮助将不胜感激。

4

2 回答 2

0

谷歌搜索后,我发现有人用一个函数解决了这个问题:

mysql> DELIMITER |
mysql> CREATE FUNCTION digits( str CHAR(32) ) RETURNS CHAR(32)
    -> BEGIN
    ->   DECLARE i, len SMALLINT DEFAULT 1;
    ->   DECLARE ret CHAR(32) DEFAULT '';
    ->   DECLARE c CHAR(1);
    ->   SET len = CHAR_LENGTH( str );
    ->   REPEAT
    ->     BEGIN
    ->       SET c = MID( str, i, 1 );
    ->       IF c BETWEEN '0' AND '9' THEN 
    ->         SET ret=CONCAT(ret,c);
    ->       END IF;
    ->       SET i = i + 1;
    ->     END;
    ->   UNTIL i > len END REPEAT;
    ->   RETURN ret;
    -> END |
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;

并使用它:

mysql> select * from t1 where actor_id > digits('ABCDefg199');
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update         |
+----------+------------+-----------+---------------------+
|      206 | a          | b         | 0000-00-00 00:00:00 |
|      200 | THORA      | TEMPLE    | 2012-05-22 15:12:26 |
+----------+------------+-----------+---------------------+
2 rows in set (0.12 sec)

来源:http ://www.artfulsoftware.com/infotree/queries.php?&bw=1280#815

于 2012-06-08T12:51:06.520 回答
0

首先 - 这种操作的需要表明数据库结构从一开始就是错误的。

您可以编写一个函数,从字符串中提取数字序列,将其转换为数字,然后进行所需的操作。

例如 - 使用正则表达式(使用附加库的 mysql 已经解决了这个问题)。

如果添加库太难 - 您可以编写一个函数,从该位置到末尾找到字符串和 substr 中第一次出现的数字。

于 2012-06-08T12:42:21.090 回答