我在 Varchar 列中有一些文本,它总是以一些数字结尾,例如:
abc12
xy2
asdf876
qwerty32
我需要选择这些数字大于某个数字 x 的值,例如如果x = 20
,结果应该是:
asdf876
qwerty32
我可以在 MySQL 中执行此操作吗?任何帮助将不胜感激。
我在 Varchar 列中有一些文本,它总是以一些数字结尾,例如:
abc12
xy2
asdf876
qwerty32
我需要选择这些数字大于某个数字 x 的值,例如如果x = 20
,结果应该是:
asdf876
qwerty32
我可以在 MySQL 中执行此操作吗?任何帮助将不胜感激。
谷歌搜索后,我发现有人用一个函数解决了这个问题:
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
首先 - 这种操作的需要表明数据库结构从一开始就是错误的。
您可以编写一个函数,从字符串中提取数字序列,将其转换为数字,然后进行所需的操作。
例如 - 使用正则表达式(使用附加库的 mysql 已经解决了这个问题)。
如果添加库太难 - 您可以编写一个函数,从该位置到末尾找到字符串和 substr 中第一次出现的数字。