Получить записи, которые являются только числами - PullRequest
3 голосов
/ 21 декабря 2011

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

select distinct SUBSTRING(PAPROJNUMBER, 1, 5) AS STUDY_NUMBER
        FROM         dbo.PA01201 AS PA01201_1
        where PAPROJNUMBER>'0'

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

68145
68146
68147
7762A
99999
LABOR

Мне нужны все, кроме 7762A и LABOR. Как я могу изменить предложение where для эффективного достижения этого?

Ответы [ 3 ]

6 голосов
/ 21 декабря 2011

Добавление '.0e0' к подстроке гарантирует, что ISNUMERIC возвращает только действительные целые числа.

select distinct SUBSTRING(PAPROJNUMBER, 1, 5) AS STUDY_NUMBER
    FROM dbo.PA01201 AS PA01201_1
    where PAPROJNUMBER>'0'
        AND ISNUMERIC(SUBSTRING(PAPROJNUMBER, 1, 5) + '.0e0') = 1
2 голосов
/ 21 декабря 2011

Вы можете сделать следующее

SELECT
  SUBSTRING(PAPROJNUMBER, 1, 5) AS STUDY_NUMBER
FROM dbo.PA01201
WHERE SUBSTRING(PAPROJNUMBER, 1, 5) LIKE '[0-9][0-9][0-9][0-9][0-9]'
0 голосов
/ 21 декабря 2011

Добавьте ISNUMERIC () к предложению where:

select distinct SUBSTRING(PAPROJNUMBER, 1, 5) AS STUDY_NUMBER
from DBO.PA01201 AS PA01201_1
where PAPROJNUMBER > '0' AND ISNUMERIC(SUBSTRING(PAPROJNUMBER, 1, 5))

В качестве альтернативы, вы можете отказаться от сравнения >:

select distinct SUBSTRING(PAPROJNUMBER, 1, 5) AS STUDY_NUMBER
from DBO.PA01201 AS PA01201_1
where ISNUMERIC(SUBSTRING(PAPROJNUMBER, 1, 5))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...