11
votes

SQL Rechercher un champ numérique pour des nombres non entiers

J'ai un dB qui a un champ numérique et j'ai besoin de rechercher toutes les lignes et de ne renvoyer que les nombres non entiers.

J'ai essayé la requête ci-dessous et conserve des enregistrements de rétroaction qui ont 0. xxx


2 commentaires

Désolé, je mets à Varchari, j'ai laissé de côté de l'exemple


Voici une question connexe ... Appliquez simplement ces pratiques avec le <> à votre colonne: Stackoverflow.com/Questions/44046/...


5 Réponses :


15
votes

Vous pouvez utiliser uniquement avec des champs de caractères, pas avec le nombre (entier ou float).

si par "Nombres entiers", vous voulez dire 0,0, 2.0, -5.0, etc. et non 12,5, 0,67, 0,67, puis ce peut DO: P>

SELECT li.QTY 
  FROM TABLE LI 
  WHERE li.QTY != FLOOR(li.QTY)
;


6 commentaires

Cela exact sauf qu'il veut sans nombre total . Il suffit de changer votre = sur <> . Il pourrait faire exactement la même logique en utilisant rond et comme int ... juste comprendre ce qui est le plus rapide!


À la recherche d'un nombre avec une décimale


Oui, thnx. Les fonctions rondes et de plafond fonctionneraient les mêmes ici. Je ne sais pas si je me faisais comme INT serait plus rapide, probablement pas.


@ypercube, donc étage ... Je parie que l'un d'eux dépend d'une autre cependant. Il devrait simplement tester pour voir ce qui est le plus rapide pour son jeu de données.


ypercube - vous peut utiliser comme avec des données numériques. Tant que vous savez ce que vous faites.


À propos de la distribution comme INT, je pensais juste que cela ne fonctionnerait peut-être pas dans certains cas. Cela dépendrait de la précision de l'INT et du nombre converti.



3
votes

pourquoi il fait pas strong> travail. Lorsque la quantité est une colonne numérique, lorsque vous l'affichez, ou implicitement convertissez en varchar (comme cela est implicitement), tous les numéros seront déployés sur le même nombre de décimales.

Considérez cette instruction SQL P>

SELECT li.QTY, CONVERT(varchar, li.qty)
FROM TBL LI
WHERE li.QTY LIKE '%.%[^0]%'


0 commentaires

1
votes
--Most Def...Cast as an int...Save you from validation of anything. Especially for conversions of dates into a whole date since Microsoft does not like a round down date function.

--For example:

--For every 300 hours an employee works they receive 1 whole day of vacation

--partial days of vacation will not be counted

Declare 

@SumHours as decimal(38,10),

@VacationValidation as int

Set @SumHours = 3121.30000000000000000000
Set @VacationValidation = 300

Select cast(((@SumHours)/(@VacationValidation)) as int)
Select day(((@SumHours)/(@VacationValidation))) -1

--without casting as an int, I would need to validated the Day function to make sure that I'm not 

--offsetting a whole day by one day.

0 commentaires

0
votes

fonction de fonction de distribution pour moi.

SELECT li.QTY FROM TABLE LI WHERE li.QTY != CAST(li.QTY AS  INTEGER)


0 commentaires

0
votes

déclarer @Value comme flotteur

SET @Value = 250.00

cas lorsque Charindex ('.', (fonte (b.value/@value comme char))) = 0 alors 'wholenumber' sinon 'fraction' fin comme mrésult


1 commentaires

S'il vous plaît, ne postez pas de réponses sur le code seulement. Les futurs lecteurs seront reconnaissants de voir expliquer pourquoi répond à la question au lieu de deviner de voir le code. En outre, lorsque vous répondez à de vieilles questions, vous devez indiquer comment la réponse améliore les réponses existantes. Cela dit, franchement je me demande comment cela répond à la question. En outre, ce n'est pas une syntaxe correcte.