#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,