Попытка изменить переменную, чтобы после [закрыто]не отображались никакие десятичные точки или значения

0

Вопрос

У меня есть запрос добавления, в котором исходное значение поля Manager_ID равно значению varchar(250) = 31.0. Мне нужно преобразовать или привести значение так, чтобы отображалось только "31", и удалить все после десятичной дроби. Я пытался преобразовать и привести как к целому числу, так и к nvarchar, но безуспешно. Я продолжаю получать следующую ошибку:

Не удалось выполнить преобразование при преобразовании значения varchar '31.0' в тип данных int.

Я безуспешно играл с различными типами полей как в таблице вставки, так и в таблице данных.

Что я упускаю?

Спасибо

Сообщение об ошибке для преобразования(int, преобразование(десятичное(9,2),[идентификатор менеджера]))

Ошибка преобразования типа данных varchar в числовой.

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]

Окончательное решение

,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

Лучший ответ

1

Функция преобразования очень полезна для этого. Ниже приведено то, что я бы использовал:

  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

Спасибо, однако, я безуспешно пытался это сделать, см. сообщение об ошибке. "Ошибка преобразования типа данных varchar в числовой".
Karen Schaefer

Чтобы подтвердить, все ли записи в столбце ManagerID являются истинными числовыми значениями? Я получаю эту ошибку, когда при попытке преобразования в поле появляются другие строковые значения.
Lee Whieldon

Исходные данные-это varchar(250), и я хочу преобразовать изменение значения в число и удалить десятичную дробь из-за проблемы, которая станет внешним ключом в других таблицах. Я проверяю данные на наличие любых ошибочных данных.
Karen Schaefer

Учитывая, что исходными данными являются varchar, может существовать практически любое значение. Лучше всего использовать try_convert(). Вместо того, чтобы выдавать ошибку, он вернет нулевое значение, которое было бы легко поймать.
John Cappelletti

Окончательные результаты см. в нижней части моего вопроса
Karen Schaefer

На других языках

Эта страница на других языках

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

Популярное в этой категории

Популярные вопросы в этой категории