Преобразование varchar в целое число из подстроки

#sql-server #integer #varchar

#sql-сервер #целое число #варчар

Вопрос:

использование Microsoft SQL Server 2019

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

 SUBSTRING(curv.curv_data,   CHARINDEX('PctUsage', curv.curv_data, CHARINDEX('||1', curv.curv_data))   9,   (CHARINDEX(')())', curv.curv_data, CHARINDEX('PctUsage', curv.curv_data, CHARINDEX('||2', curv.curv_data))) - 9) - CHARINDEX('PctUsage', curv.curv_data, CHARINDEX('||1', curv.curv_data)   9)) PctUsage1  

Вот результат.

PctUsage1
5
3.5
0.5
6.5
5
9
1
1.3
1.5
25.
4
0.0
1.2

поэтому, учитывая, что есть 0 и 0,5, мне трудно превратить эту колонку во что-то полезное. конечный результат, который я хотел бы получить, — это превратить их в полезные проценты, например, 5 превращается в 0,05 и так далее.

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

Рабочие часы
51.600006
0.000000
20.799993
8.399999
28.799999
86.027731
5.199999

Это линия, которую я хотел бы использовать

 PctUsage1*Working_hours curved_hours,  

Таким образом, working_hours уже является целым числом, но Pctusage1-это переменная

Заранее благодарю вас за помощь

Комментарии:

1. Если вам нужны десятичные знаки, вы хотите использовать десятичный тип данных, а не int. Вы можете легко превратить свои результаты в желаемый результат, просто разделив их на 100,0. Обратите внимание на десятичную точку там, это важно.

2. К вашему сведению, вы используете SQL Server, а не среду SQL Server Management Studio (SSMS). SSMS-это просто среда разработки для использования с SQL Server. Это все равно, что сказать, что вы используете Visual Studio, когда вас спрашивают, на каком языке вы пишете.

3. Я очень открыт для разделения результатов на 100 для этого, моя проблема заключается в том, чтобы превратить varchar, которым он в настоящее время является, во что-то, что можно разделить, если у вас есть какие-либо предложения, я весь внимание(и глаза) Спасибо вам за ответ!

4.Что касается превращения их в проценты, я бы лично сохранил их в виде десятичных значений. 5% в качестве числового значения 0.05 , и любой хороший слой представления будет отображать значение, например 0.05 , при заданном стиле формата что-то вроде "0%" будет отображать это значение как 5% .

5. @Larnu Спасибо, это будет полезно для продвижения вперед. есть ли простой способ определить, какая версия SQL server у меня запущена?

Ответ №1:

Итак, я думаю, что у меня есть решение, извините за любые проблемы, которые вы, ребята, доставили, я думаю, что изложение моей проблемы действительно помогло мне справиться с ней. я использовал оператор case с try_cast, который помог отфильтровать различные проблемы, с которыми я сталкивался, используя только одно решение. последняя проблема с этим заключается в том, чтобы убедиться, что мой множитель верен, для этого мне пришлось использовать CHARINDEX со встроенным оператором case

 case when try_cast(PctUsage1 as int) is null then case when CHARINDEX('.',PctUsage1) = 3 then cast(replace(PctUsage1, '.','') as Decimal(5,2))/100 when CHARINDEX('.',PctUsage1) = 2 then cast(replace(PctUsage1, '.','') as Decimal(5,2))/1000 end else try_cast(PctUsage1 as decimal(5,2))/100 end PctUsage1_converted,