Je pense que c’est un problème simple mais qui n’a pas encore été résolu. Je voudrais obtenir les numéros valides seulement d'une colonne comme expliqué ici.
Disons que nous avons une colonne varchar avec les valeurs suivantes
ABC
Italy
Apple
234.62
2:234:43:22
France
6435.23
2
Lions
Ici le problème est de ne sélectionner que des chiffres
select * from tbl where answer like '%[0-9]%'
l'aurait fait mais il retourne
234.62
2:234:43:22
6435.23
2
Ici, évidemment, 2: 234: 43: 22 n'est pas souhaité car ce n'est pas un numéro valide.
Le résultat souhaité est
234.62
6435.23
2
Y a-t-il un moyen de faire cela?
Tu peux essayer ça
ISNUMERIC renvoie 1 lorsque l'entrée expression est évaluée à une valeur valide type de données numérique; sinon c'est renvoie 0.
DECLARE @Table TABLE(
Col VARCHAR(50)
)
INSERT INTO @Table SELECT 'ABC'
INSERT INTO @Table SELECT 'Italy'
INSERT INTO @Table SELECT 'Apple'
INSERT INTO @Table SELECT '234.62'
INSERT INTO @Table SELECT '2:234:43:22'
INSERT INTO @Table SELECT 'France'
INSERT INTO @Table SELECT '6435.23'
INSERT INTO @Table SELECT '2'
INSERT INTO @Table SELECT 'Lions'
SELECT *
FROM @Table
WHERE ISNUMERIC(Col) = 1
Vous pouvez utiliser les éléments suivants pour inclure uniquement des caractères valides:
SQL
SELECT * FROM @Table
WHERE Col NOT LIKE '%[^0-9.]%'
Résultats
Col
---------
234.62
6435.23
2
Essayez quelque chose comme ceci - cela fonctionne pour les cas que vous avez mentionnés.
select * from tbl
where answer like '%[0-9]%'
and answer not like '%[:]%'
and answer not like '%[A-Z]%'
Avec SQL 2012 et versions ultérieures, vous pouvez utiliser TRY_CAST
/TRY_CONVERT
pour essayer de convertir en type numérique, par exemple TRY_CAST(answer AS float) IS NOT NULL
- notez cependant que cela correspondra également à la notation scientifique (1 + E34). (Si vous utilisez decimal
, la notation scientifique ne correspondra pas)