3 votes

Obtenir des enregistrements qui ne sont que des nombres

J'ai cette requête en cours. La plupart du temps, elle fonctionne correctement, mais quelques enregistrements comportent des parties non numériques, ce qui pose des problèmes. J'ai besoin de pouvoir sélectionner uniquement les enregistrements qui sont des nombres entiers.

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

Par exemple, une partie de la liste de résultats ressemble à ceci :

68145
68146
68147
7762A
99999
LABOR

Je veux tout ça sauf 7762A et LABOR. Comment puis-je modifier la clause where pour y parvenir efficacement ?

6voto

Joe Stefanelli Points 72874

En ajoutant '.0e0' à la sous-chaîne, on s'assure que l'ISNUMERIC ne renvoie que des entiers valides.

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

2voto

John Hartsock Points 36565

Vous pourriez faire ce qui suit

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]'

-2voto

AllenG Points 6242

Ajoutez ISNUMERIC() à votre clause 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))

Alternativement, vous pouvez laisser tomber le > comparaison :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X