3

我有如下所示的查询。

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;

使用此查询,我找到了 string 中第一个整数的位置

我的问题是

使用regex如何消除我拥有的那 10 行,如下所示。

    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)

知道如何完成这项工作吗?

演示

4

2 回答 2

1

看看MySQL: Use REGEX to extract string (select REGEX) and the first result of google "mysql regex locate"。似乎不可能用 mysql 中的正则表达式来做到这一点。您的解决方案已经是一个很好的方法。

于 2012-06-22T12:20:05.090 回答
0

请参阅此用户定义的功能

您可以REGEXP_INSTR?从那里找到数字的位置。(虽然没有测试过。)

于 2012-06-22T13:37:01.330 回答