Tentar alterar uma coluna varchar para não apresentar quaisquer pontos decimais ou valores após [fechado]

0

Pergunta

Eu tenho uma consulta de acréscimo onde o valor original do Manager_ID campo é varchar(250) valor = 31.0. Eu preciso converter-se ou converter o valor para exibir apenas '31' e remova tudo após a vírgula. Eu tenho tentado tanto, Converter e converter para um número inteiro ou nvarchar, sem sucesso. Estou recebendo o seguinte erro:

Falha ao converter o valor varchar '31.0" para o tipo de dados int.

Eu tenho jogado com os diferentes tipos de campo, sem sucesso, tanto em inserir tabela e a tabela de dados.

O que eu estou ausente?

Obrigado

Mensagem de erro para o convert(int, converter(decimal(9,2),[Manager_ID]))

Erro de conversão de tipo de dados varchar numérico.

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ção 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

Melhor resposta

1

Converter função é muito útil para isso. Abaixo está o que eu usaria:

  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

Obrigado, no entanto, eu tentei isso, sem sucesso, ver mensagem de erro. "Erro de conversão de tipo de dados varchar numérico."
Karen Schaefer

Para confirmar, são todos de gravação no ManagerID coluna verdadeiros valores numéricos? Eu recebo este erro quando não há outros valores de cadeia de caracteres com base no campo ao tentar converter.
Lee Whieldon

Os dados originais é um varchar(250) e eu quero converter-se alterar o valor para um número e remover o decimal devido ao problema que isso vai se tornar uma chave estrangeira, em outras tabelas. Eu sou verifique os dados para dados erróneos.
Karen Schaefer

Considerando-se a fonte de dados varchar, praticamente qualquer valor poderia existir. Melhor usar try_convert(). Em vez de lançar um erro, ele vai retornar um valor NULO, o que seria fácil armadilha.
John Cappelletti

Veja a parte inferior da minha pergunta para os Resultados finais
Karen Schaefer

Em outros idiomas

Esta página está em outros idiomas

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