Игнорировать текст и извлечь номер между 8 и 12 цифрами - PullRequest
0 голосов
/ 03 мая 2018

Я хочу извлечь только число, если оно длиной от 8 до 12 цифр, в противном случае я хочу, чтобы оно было пустым. Однако в столбце данных может быть текст, который я хочу пустым.

Попробовал изменения кода ниже, используя разные скобки, хотя я получаю сообщение об ошибке

SELECT CASE WHEN
    isnumeric(dbo.worksheet_pvt.MPRNExpected) = 0 THEN '' ELSE(
        CASE WHEN(
            len(dbo.worksheet_pvt.MPRNExpected) >= 8
            AND len(dbo.worksheet_pvt.MPRNExpected) < 13
        ) THEN dbo.worksheet_pvt.MPRNExpected ELSE ''
    END
) AS [ MPRN Expected ]

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Если вы используете SQL Server, я бы предложил:

select (case when p.MPRNExpected not like '%[^0-9]%' and
                  len(p.MPRNExpected) between 8 and 12
             then p.MPRNExpected
        end) as MPRN_Expected
       . . .
from dbo.worksheet_pvt p

Предположительно, вы не хотите isnumeric(), потому что он допускает такие символы, как '.', '-' и 'e' в "число".

Проблема с вашим кодом в том, что у вас есть два case выражения, и они не заканчиваются правильно.

Как примечание, в MySQL вы должны использовать регулярные выражения:

select (case when p.MPRNExpected regexp '^[0-9]{8-12}$'
             then p.MPRNExpected
        end) as MPRN_Expected
       . . .
from dbo.worksheet_pvt p
0 голосов
/ 03 мая 2018

Попробуйте этот запрос

SELECT CASE WHEN ISNUMERIC(COLUMN_NAME)=0 THEN '' ELSE 
CASE WHEN (LEN(COLUMN_NAME)>=8 AND LEN(COLUMN_NAME)<13) 
THEN COLUMN_NAME ELSE ''END END AS data FROM TABLE_NAME

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...