SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE fb_lab_test
(
[id] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[Test_No] [varchar](50) NULL,
[execute_date] [datetime] NULL,
[PatientId] [varchar](20) NULL,
[Visit_Id] [varchar](10) NULL,
[Patient_Type] [int] NULL,
[PatientName] [varchar](100) NULL,
[result_date_time] [datetime] NULL,
[report_item_name] [varchar](256) NULL,
[report_item_code] [varchar](50) NULL,
[result] [varchar](100) NULL
) ON [PRIMARY]
GO
INSERT INTO fb_lab_test
VALUES ('5910315197','2019-10-31 00:40:53.000','111111','1','1','Tom','2019-10-31 08:56:54.000','test1','KET','-')
3 Réponses :
Dans mon cas (en utilisant vos données) une erreur n'est pas lancée. Parfois, le moteur décide d'effectuer des opérations à l'avance (afin d'optimiser une requête particulière). Je crois, vous obtenez une erreur en raison de ce comportement.
Vous pouvez le réparer en utilisant try_cast code>: p>
Il se comporte en réalité par la documentation ... P>
Isnumeric retourne 1 pour certains caractères qui ne sont pas des chiffres, tels que plus (+), moins (-) et des symboles de devise valides tels que le signe dollar ($). Pour une liste complète des symboles monétaires, voir l'argent et la petite monnaie (transact-sql). P>
https://docs.microsoft.com/en-us/sql/t-sql/functions/isnumeric-Transact-SQL?View=SQL-Server-ver15 P>
SQL Server renvoie un message d'erreur lors de la conversion de données de caractères nonNumériques, NCHAR, NVARCHAR ou VARCHAR sur Decimal, Float, Int, Numérique. SQL Server renvoie également une erreur lorsqu'une chaîne vide ("") est convertie en numérique ou en décimal. P>
Si vous avez besoin de le convertir dans une seule expression, je vous suggère d'utiliser un type d'argent qui prend en charge jusqu'à 4 décimales. Sinon, vous devez faire face aux valeurs de numéro «possibles» de + code> - code> . Code> etc ... p>
J'ai remplacé le isnumeric (résultat) code> avec Patindex ('% [^ 0-9 |]%', résultat) code>, mais ce n'est pas le point de la question, cause cas iSnumeric (résultat) lorsque 1 puis coulant (résultat en tant que flotteur) else 10000.0 extrémité> 0.2 code> ne doit jamais être évalué dans les données d'échantillonnage que je donne, de toute façon merci beaucoup
Case ISnumeric (Résultat) Code> Lorsque le résultat est - CODE> Retours 1 C'est pourquoi la distribution est appelée. La documentation SQL Server l'appelle comme telle. Les échantillons de données que vous avez donnés ont le résultat de - code>.
Mais dans mon exemple de données, il n'y a pas de rapport_item_code nommé 'anti-hbc' ... Désolé pour ma pauvre expression anglaise et peu claire
n'utilise pas Il est également une bonne idée d'éviter code> EXPRESSIONS CODE> dans le Dans ce cas, vous souhaitez inclure les valeurs non numériques. Plus souvent, ceux-ci seraient exclus. Vous pouvez simplement laisser le isnumeric () code> du tout. Utilisez simplement le Essayez _ code> Fonctions: où code > Clause. Ils sont essentiellement court-circuit l'optimiseur. P> null code> la comparaison les exclure. Cette logique serait: p>