Разделение поля и добавление десятичной точки для создания числового значения SQL - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть поле в SQL Server 2014, с которым я работаю, которое выглядит так:

**RawField**
20060202
20060323

Я хочу добавить разделить поле, добавить десятичную точку и создать числовое поле. Вот что я хотел бы увидеть:

**RawField**
200602.02
200603.23

Поэтому мне нужно разделить поле, добавить десятичную точку и преобразовать в числовое значение. Я попробовал некоторый код, но получал ошибку. Пожалуйста, смотрите мой код ниже:

  select top 1000 cast(SUBSTRING(cast(RawField as varchar(6)),1,6) + cast('.' as varchar(1)) + SUBSTRING(cast(RawField as varchar(2)),6,2) as int)
  from Table

Я получаю ошибку:

Msg 245, Level 16, State 1, Line 11
Conversion failed when converting the varchar value '200602.' to data type int.

Это хороший подход?

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Используйте float / numeric / decimal при приведении

select cast(SUBSTRING(RawField ,1,6) + cast('.' as varchar(1)) + SUBSTRING(RawField ,7,2) as numeric(16,2))
0 голосов
/ 18 сентября 2018

Пожалуйста, попробуйте это.

select top 1000 cast(SUBSTRING(cast(RawField as varchar(6)),1,6) + cast('.' as varchar(1)) + SUBSTRING(cast(RawField as varchar(2)),6,2) as numeric(8,2))
  from Table

Вы пытаетесь привести строку с десятичным числом к ​​int.

0 голосов
/ 18 сентября 2018

Вы хотите преобразовать строку в цифровую форму с двумя десятичными разрядами?

select convert(decimal(10,2), RawField) / 100.0

У меня в гостях ваш RawField содержит другие буквенно-цифровые символы после этого, и вы разместили только первые 8 символов?

thisдолжно сработать.Просто возьмите первые 8 символов и конвертируйте.Простой и прямой

select convert(decimal(10,2), left(RawField, 8)) / 100.0
...