Încercarea de a schimba un varchar pentru a nu afișa orice zecimale sau valorile după [închis]

0

Problema

Am un append query în cazul în care valoarea inițială a Manager_ID câmp este un varchar(250) valoare = 31.0. Am nevoie pentru a converti sau turnate valoarea pentru a afișa numai '31' și scoateți tot ce este după virgulă. Am incercat ambele Converti & Exprimate atât un număr întreg sau nvarchar, fără succes. Tot primesc urmatoarea eroare:

Conversie eșuat atunci când conversia varchar valoarea '31.0' a datelor de tip int.

Am jucat cu diferite tipuri de teren, fără succes, atât în inserează un tabel și tabelul de date.

Ce sunt eu lipsesc?

Multumesc

Eroare MSG pentru a converti(int, converti(zecimal(9,2),[Manager_ID]))

Eroare de conversie de tip de date varchar să numerice.

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]

Soluția Finală

,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

Cel mai bun răspuns

1

Funcție de conversie este foarte util pentru acest lucru. Mai jos este ceea ce mi-ar folosi:

  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

Vă mulțumesc, cu toate acestea, am încercat, fără succes vedea un mesaj de eroare. "Eroare de conversie de tip de date varchar să numerice."
Karen Schaefer

Pentru a confirma, sunt toate de înregistrare în ManagerID coloana adevăratele valori numerice? I a lua această eroare atunci când nu există alte bazat pe un șir de valori în domeniul atunci când încearcă pentru a converti.
Lee Whieldon

Datele originale este un varchar(250) și vreau să converti schimba valoarea la un număr și scoateți zecimal din cauza la problema asta va deveni o cheie externă, în alte tabele. Eu sunt verificați de date pentru orice date eronate.
Karen Schaefer

Având în vedere sursa de date este varchar, practic, orice valoare ar putea exista. Cel mai bun de a utiliza try_convert(). Mai degrabă decât arunca o eroare, se va returna o valoare NULĂ, care ar fi ușor să-l prindă.
John Cappelletti

Vezi jos de întrebarea mea pentru Rezultatele finale
Karen Schaefer

În alte limbi

Această pagină este în alte limbi

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