1

Varchar 列に、常にいくつかの数字で終わるテキストがあります。たとえば、次のようになります。

abc12
xy2
asdf876
qwerty32

これらの数値が数値 x より大きい値を選択する必要があります。たとえば、 の場合x = 20、結果は次のようになります。

asdf876
qwerty32

MySQLでこれを行うことはできますか? どんな助けでも大歓迎です。

4

2 に答える 2

0

まず第一に、そのような操作の必要性は、データベース構造が最初から間違っていたことを示唆しています。

文字列から数値シーケンスを抽出し、それを数値に変換してから、必要な操作を行う関数を作成できます。

たとえば、正規表現を使用します(この問題は、追加のライブラリを使用するmysqlで解決されています)。

ライブラリの追加が難しすぎる場合は、文字列内の最初の数字と、この位置から最後までのsubstrを検出する関数を記述できます。

于 2012-06-08T12:42:21.090 に答える
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 に答える