Essayer de changer de type varchar pour ne pas afficher tous les points décimaux ou des valeurs après [fermé]

0

La question

J'ai une requête ajout, où la valeur d'origine de la Manager_ID champ est un champ de type varchar(250) valeur = 31.0. J'ai besoin de convertir ou de fonte de la valeur à afficher uniquement '31" et d'enlever tout ce qui est après la virgule. J'ai essayé les deux, de conversion et de Fonte à la fois un nombre entier ou nvarchar, sans succès. Je reçois le message d'erreur suivant:

Échec de la Conversion lors de la conversion de la valeur varchar '31.0" pour le type de données int.

J'ai joué avec les différents types de champ, sans succès, à la fois dans l'insert de la table et de la table de données.

Ce qui me manque?

Merci

Erreur MSG pour convertir(int, convert(decimal(9,2),[Manager_ID]))

Erreur lors de la conversion du type de données varchar numérique.

INSERT IGNORE INTO [dbo].[tblUsers]
      ( [User_ID]
       ,[FirstName]
       ,[LastName]
       ,[FullName]
       ,[EMail]
       ,[UserRoles]
       ,[PostionType]
       ,[ManagerID]
       ,[UUID]
       ,[External_UUID]
       ,[home_Location_id]
       ,[Home_Organization_ID]
       ,[Record_types]
       ,[Location_Ceiling_ID]
       ,[Organization_Ceiling_ID]
       ,[Payroll_Identifier]
       ,[Created_Date]
       ,[Created_Time]
       ,[Update_Date]
       ,[Update_Time])   
Select  id-- User_ID
        ,first_name 
        ,last_name 
        ,full_name 
        ,email 
        ,role_id --UserRoles
        ,position --PositionType
        ,**cast(Manager_id as nvarchar(10)) as ManagerID**
        ,uuid 
        ,external_uuid 
        ,home_location_id
        ,home_organization_id
        ,[type] --Record_Types
        ,location_ceiling_id 
        ,organization_ceiling_id
        ,payroll_identifier 
        ,Left(Convert(varchar(20), created_at, 120),10) as Create_Date
        ,Right(convert(varchar(16), created_at, 120),5) as Create_Time
        ,left(Convert(varchar(20), updated_at, 120),10) as Update_Date
        ,Right(convert(varchar(16), updated_at, 120),5) as Update_Time
    from [stg].[Users]

La Solution Finale

,SUBSTRING(manager_id, 1, 
  CASE WHEN CHARINDEX('.',manager_id) - 1 < 0 
   THEN LEN(manager_id) 
   ELSE CHARINDEX('.',manager_id) - 1 END) as  ManagerID
sql sql-server tsql
2021-11-23 19:52:25
1

La meilleure réponse

1

Convertir fonction est très utile pour cela. Ci-dessous est ce que j'ai utiliser:

  INSERT IGNORE INTO [dbo].[tblUsers]
      ( [User_ID]
       ,[FirstName]
       ,[LastName]
       ,[FullName]
       ,[EMail]
       ,[UserRoles]
       ,[PostionType]
       ,[ManagerID]
       ,[UUID]
       ,[External_UUID]
       ,[home_Location_id]
       ,[Home_Organization_ID]
       ,[Record_types]
       ,[Location_Ceiling_ID]
       ,[Organization_Ceiling_ID]
       ,[Payroll_Identifier]
       ,[Created_Date]
       ,[Created_Time]
       ,[Update_Date]
       ,[Update_Time])   
Select  id as User_ID
        ,first_name 
        ,last_name 
        ,full_name 
        ,email 
        ,role_id as UserRoles
        ,position as PositionType
        ,convert(int, convert(decimal(9,2),[Manager_ID])) as ManagerID
        ,uuid 
        ,external_uuid 
        ,home_location_id
        ,home_organization_id
        ,[type] as Record_Types
        ,location_ceiling_id 
        ,organization_ceiling_id
        ,payroll_identifier 
        ,Left(Convert(varchar(20), created_at, 120),10) as Create_Date
        ,Right(convert(varchar(16), created_at, 120),5) as Create_Time
        ,left(Convert(varchar(20), updated_at, 120),10) as Update_Date
        ,Right(convert(varchar(16), updated_at, 120),5) as Update_Time
    from [stg].[Users]
2021-11-23 19:59:14

Merci à vous, cependant, j'ai essayé sans succès de voir le message d'erreur. "Erreur lors de la conversion du type de données varchar numérique."
Karen Schaefer

Pour confirmer, sont tous d'enregistrement dans le ManagerID colonne de vrai valeurs numériques? J'obtiens cette erreur quand il y a d'autres chaîne de valeurs dans le champ lorsque vous tentez de convertir.
Lee Whieldon

Les données d'origine est un varchar(250) et je veux convertir modifiez la valeur d'un nombre et de la suppression de la virgule en raison de la question, cela deviendra une clé étrangère, dans les autres tables. Je suis de vérifier les données pour toutes les données erronées.
Karen Schaefer

Compte tenu de la source de données est de type varchar, pratiquement n'importe quelle valeur pourrait exister. Préférable d'utiliser try_convert(). Plutôt que de jeter une erreur, elle renvoie la valeur NULL qui serait facile de le piéger.
John Cappelletti

Voir le fond de ma question pour les Résultats finaux
Karen Schaefer

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................