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