以下是我在表中的内容 myTable
+++++++++++++++
+ id + myWord +
+++++++++++++++
+ 1 + AB123 +
+ 2 + A413D +
+ 3 + X5231 +
+ 4 + ABE921 +
+++++++++++++++
Run Code Online (Sandbox Code Playgroud)
当我执行
SELECT id, Locate('1',myWord) as myPos
FROM myTable;
Run Code Online (Sandbox Code Playgroud)
我得到1的位置.
+++++++++++++++
+ id + myPos +
+++++++++++++++
+ 1 + 3 +
+ 2 + 3 +
+ 3 + 5 +
+ 4 + 6 +
+++++++++++++++
Run Code Online (Sandbox Code Playgroud)
我想要实现的是找到整数的第一个位置,这样我将得到低于输出.
+++++++++++++++++++++++
+ id + myWord + myPos +
+++++++++++++++++++++++
+ 1 + AB123 + 3 +
+ 2 + A413D + 2 +
+ 3 + X5231 + 2 +
+ 4 + ABE921 + 4 +
+++++++++++++++++++++++
Run Code Online (Sandbox Code Playgroud)
任何想法我怎么能做到这一点?
在xdazz答案的帮助下,我做了一些改动,最后得到了答案......
SELECT
myWord,
LEAST (
if (Locate('0',myWord) >0,Locate('0',myWord),999),
if (Locate('1',myWord) >0,Locate('1',myWord),999),
if (Locate('2',myWord) >0,Locate('2',myWord),999),
if (Locate('3',myWord) >0,Locate('3',myWord),999),
if (Locate('4',myWord) >0,Locate('4',myWord),999),
if (Locate('5',myWord) >0,Locate('5',myWord),999),
if (Locate('6',myWord) >0,Locate('6',myWord),999),
if (Locate('7',myWord) >0,Locate('7',myWord),999),
if (Locate('8',myWord) >0,Locate('8',myWord),999),
if (Locate('9',myWord) >0,Locate('9',myWord),999)
) as myPos
FROM myTable;
Run Code Online (Sandbox Code Playgroud)
如果经常使用MySQL,最好使用字符串函数 SUBSTRING()和ASCII()来创建存储函数.
DELIMITER //;
CREATE FUNCTION find_first_int(pData CHAR(10))
RETURNS INT
BEGIN
DECLARE vPos INT DEFAULT 1;
DECLARE vRes INT DEFAULT 0;
DECLARE vChar INT;
WHILE vPos <= LENGTH(pData) DO
SET vChar = ASCII(SUBSTR(pData, vPos, 1));
IF vChar BETWEEN 48 AND 57 THEN
RETURN vPos;
END IF;
SET vPos = vPos + 1;
END WHILE;
RETURN NULL;
END//
DELIMITER ;//
Run Code Online (Sandbox Code Playgroud)
结果:
mysql> SELECT id, myWord, find_first_int(myWord) AS myPos FROM t1;
+------+--------+-------+
| id | myWord | myPos |
+------+--------+-------+
| 1 | AB123 | 3 |
| 2 | A413D | 2 |
| 3 | X5231 | 2 |
| 4 | ABE921 | 4 |
| 5 | ABC | NULL |
+------+--------+-------+
Run Code Online (Sandbox Code Playgroud)
可以使用函数IFNULL()更改NULL结果.
请注意,该函数只接受CHAR(10),因此您可能希望更改更长的数据.
| 归档时间: |
|
| 查看次数: |
10780 次 |
| 最近记录: |