Cercando di cambiare un varchar per non visualizzare qualsiasi punto decimale o valori dopo [chiuso]

0

Domanda

Ho una query di accodamento in cui il valore originale del Manager_ID campo è un varchar(250) valore = 31.0. Ho bisogno di convertire o il cast del valore di visualizzare solo '31", e rimuovere tutto dopo il separatore decimale. Ho provato sia la Conversione & Cast sia un numero intero o nvarchar, senza successo. Io continuo a ricevere il seguente errore:

La conversione non riuscita durante la conversione del valore varchar '31.0' per il tipo di dati int.

Ho giocato con diversi tipi di campo senza successo, sia in inserisci tabella e la tabella di dati.

Che cosa mi manca?

Grazie

Messaggi di errore convert(int, la conversione(decimal(9,2),[Manager_ID]))

Errore durante la conversione del tipo di dati varchar numerici.

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]

Soluzione 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

Migliore risposta

1

Funzione di conversione è molto utile per questo. Di seguito è ciò che vorrei utilizzare:

  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

Grazie, comunque, ho cercato senza successo di vedere un messaggio di errore. "Errore di conversione del tipo di dati varchar numerici."
Karen Schaefer

Per confermare, sono tutti di registrazione nella colonna ManagerID veri valori numerici? Ricevo questo errore quando c'è altra stringa di valori in campo durante un tentativo di conversione.
Lee Whieldon

I dati originali è un varchar(250) e voglio convertire modificare il valore di un numero e rimuovere il decimale a causa del problema di questo diventerà una chiave esterna, in altre tabelle. Io sono di controllare i dati per eventuali dati errati.
Karen Schaefer

Considerando la fonte dei dati è di tipo varchar, praticamente qualsiasi valore potrebbe esistere. Meglio usare try_convert(). Piuttosto che buttare un errore, verrà restituito un valore NULL che sarebbe stato facile trappola.
John Cappelletti

Vedere in fondo la mia domanda per i Risultati finali
Karen Schaefer

In altre lingue

Questa pagina è in altre lingue

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