преобразовать тип данных nvarchar в int и разделить - PullRequest
0 голосов
/ 25 октября 2018

Я использую SQL Server 2016, и у меня есть таблица с 2 столбцами с типом данных nvarchar, данные в первом столбце «100 ~ 50» и во втором столбце «50 ~ 25». Я хочу разделить первый столбец навторой столбец и окончательные данные '2 ~ 2'

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Вы можете попробовать ниже

ДЕМО

 select concat(val1,'~',val2) as col
from
(
select cast(substring(column1,0,charindex('~',column1)) as int)/cast(substring(column2,0,charindex('~',column2)) as int) as val1,
cast(substring(column1,charindex('~',column1)+1,len(column1)-charindex('~',column1)) as int)/cast(substring(column2,charindex('~',column2)+1,len(column2)-charindex('~',column2)) as int) as val2
from cte1
)X

ВЫХОД:

col
2~2
0 голосов
/ 25 октября 2018

Вы можете сделать:

select concat(cast(left(col1, charindex('~', col1) - 1) as int) / cast(right(col1, len(col1) - charindex('~', col1)) as int), '~', 
              cast(left(col2, charindex('~', col2) - 1) as int) / cast(right(col2, len(col2) - charindex('~', col2)) as int)
             )
from table t;

РЕДАКТИРОВАТЬ : Вы можете избежать арифметической ошибки divide by zero, используя where предложение:

where right(col1, len(col1) - charindex('~', col1)) > 0 and
      right(col2, len(col2) - charindex('~', col2)) > 0
0 голосов
/ 25 октября 2018

Тьфу.Вы действительно должны исправить свою структуру данных, чтобы один столбец не имел нескольких значений.Следующее выполняет деление - вычисление компонентов:

select cast(v1.col1_1 as int) / cast(v2.col2_1 as int) as new_col1,
       cast(v1.col2_2 as int) / cast(v2.col2_2 as int) as new_col2      
from t cross apply
     (values (left(t.col1, charindex('~', t.col1) - 1),
              left(t.col1, charindex('~', t.col2) - 1)
             )
     ) v1(col1_1, col2_1) cross apply
     (values (stuff(t1.col1, 1, len(v1.col1_1) + 1, ''),
              stuff(t2.col1, 1, len(v1.col2_1) + 1, '')
             )
     ) v2(col1_2, col2_2);

Как я уже говорил, несколько значений не должны храниться в одной строке, поэтому я не рекомендую помещать это обратно в строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...