Tratando de cambiar un tipo de datos varchar para no mostrar los puntos decimales o los valores después de la [cerrado]

0

Pregunta

Tengo una consulta de datos anexados, donde el valor original de la Manager_ID campo es de tipo varchar(250) valor = 31.0. Necesito convertir o convertir el valor a mostrar sólo '31" y eliminar todo después de la coma decimal. He intentado tanto, Convertir y Emitidos tanto a un entero o nvarchar, sin éxito. Sigo recibiendo el siguiente error:

Error de conversión al convertir el valor varchar '31.0' al tipo de datos int.

He jugado con los diferentes tipos de campo sin éxito, tanto en la inserción de la tabla y la tabla de datos.

Lo que me estoy perdiendo?

Gracias

Mensaje de Error para convert(int, convertir(decimal(9,2),[Manager_ID]))

Error de conversión de tipo de datos varchar numéricos.

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]

Solución 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

Mejor respuesta

1

Convertir función es muy útil para esto. A continuación es lo que yo uso:

  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

Gracias, sin embargo, he intentado hacer esto sin éxito consulte el mensaje de error. "Error al convertir el tipo de datos varchar numéricos."
Karen Schaefer

Para confirmar, son todos de grabación en el ManagerID columna verdaderos valores numéricos? Me sale este error cuando no hay otra cadena de valores en el campo cuando tratando de convertir.
Lee Whieldon

Los datos originales es de tipo varchar(250) y quiero convertir cambiar el valor a un número y quitar los decimales debido a que el problema en esta se convertirá en una clave foránea, en otras tablas. Yo soy de verificación de los datos de los datos erróneos.
Karen Schaefer

Considerando la fuente de datos es de tipo varchar, prácticamente cualquier valor podría existir. Mejor usar try_convert(). En lugar de tirar un error, devuelve un valor NULL que sería fácil de atrapar.
John Cappelletti

Vea el fondo de mi pregunta para los Resultados finales
Karen Schaefer

En otros idiomas

Esta página está en otros idiomas

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