Bir varchar'ı [kapalı] sonra herhangi bir ondalık nokta veya değer göstermeyecek şekilde değiştirmeye çalışıyorum.

0

Soru

Manager_İD alanının orijinal değerinin bir varchar(250) değeri = 31.0 olduğu bir ekleme sorgum var. Değeri yalnızca '31' gösterecek şekilde dönüştürmem veya atmam ve ondalık basamaktan sonra her şeyi kaldırmam gerekiyor. Her ikisini de denedim Convert & Cast hem bir tamsayıya hem de nvarchar'a başarılı olmadan. Aşağıdaki hatayı almaya devam ediyorum:

'31.0' varchar değerini int veri türüne dönüştürürken dönüştürme başarısız oldu.

Hem ekleme tablosunda hem de veri tablosunda farklı alan türleriyle başarılı olamadım.

Neyi kaçırıyorum?

Teşekkürler

Convert(int, convert(decimal(9,2),[Manager_İD]))için hata İLETİSİ

Veri türü varchar sayısal dönüştürme hatası.

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]

Nihai Çözüm

,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

En iyi cevabı

1

Dönüştürme işlevi bunun için çok yararlıdır. Aşağıda kullanacağım şey:

  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

Teşekkür ederim, ancak bunu başarı olmadan denedim hata mesajına bakın. "Veri türü varchar sayısal dönüştürme hatası."
Karen Schaefer

Onaylamak için, ManagerID sütunundaki tüm kayıtlar gerçek sayısal değerler midir? Dönüştürmeye çalışırken alanda başka dize tabanlı değerler olduğunda bu hatayı alıyorum.
Lee Whieldon

Orijinal veriler bir varchar (250) ve değeri bir sayıya dönüştürmek ve ondalık sayıyı kaldırmak istiyorum, çünkü bu, diğer tablolarda yabancı bir anahtar haline gelecektir. Hatalı veri olup olmadığını kontrol ediyorum.
Karen Schaefer

Dikkate kaynağı veri INSERT neredeyse herhangi bir değer var. Try_convert () kullanmak en iyisidir. Bir hata atmak yerine, yakalanması kolay bir NULL değeri döndürür.
John Cappelletti

Nihai Sonuçlar için sorumun altına bakın
Karen Schaefer

Diğer dillerde

Bu sayfa diğer dillerde

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