DECLARE @table table(XYZ VARCHAR(8) , id int)
INSERT INTO @table
SELECT '4000', 1
UNION ALL
SELECT '3.123', 2
UNION ALL
SELECT '7.0', 3
UNION ALL
SELECT '80000', 4
UNION ALL
SELECT NULL, 5
Requête:SQL Server - CAST et divisez
SELECT CASE
WHEN PATINDEX('^[0-9]{1,5}[\.][0-9]{1,3}$', XYZ) = 0 THEN XYZ
WHEN PATINDEX('^[0-9]{1,8}$',XYZ) = 0 THEN CAST(XYZ AS decimal(18,3))/1000
ELSE NULL
END
FROM @table
Cette partie - CAST(XYZ AS decimal(18,3))/1000
ne divise pas la valeur.
Il me donne plus de nombre de zéros après décimal au lieu de le diviser. (J'ai même inclus cela entre parenthèses et essayé mais le même résultat).
Ex:2000/1000 = 2000.000000
Est-ce que je fais quelque chose de mal ici? Les paramètres d'expression de patindex sont-ils corrects?
Expected result:
4.000
3.123
7.000
80.000
Faites-moi savoir si PATINDEX n'est pas la bonne méthode à utiliser? Je suis en train de vérifier si elle est déjà décimal avec 3 points décimaux autre que je veux diviser par 1000.
Salut, j'ai quelque chose à travailler presque qui évite PATINDEX. Quelles sont les règles pour plonger de 1000? Si XYZ inclut un point décimal, laissez tel quel, si ce n'est pas 1000? – CResults
PATINDEX (Transact-SQL) http://msdn.microsoft.com/en-us/library/ms188395.aspx Retourne la position de départ de la première occurrence d'un motif dans une expression spécifiée, ou zéro si le motif n'est pas trouvé , sur tous les types de données de texte et de caractères valides. –
@CResults - Il devrait toujours être en décimal mais parfois nous obtenons de mauvaises données 4.000 comme 4000 ou 2.310 comme 2310. Donc ce que j'essaie de faire est de vérifier s'il n'est pas dans xx.xxx le convertir en format décimal. Oui si le point d'incultion le laisse –