Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
906
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Получить число из диапазона строк sql
У меня есть столбец данных, который содержит Процентный диапазон в виде строки, которую я хотел бы преобразовать в число, чтобы я мог легко сравнивать.
Возможные значения в строке:
'<5%'
'5-10%'
'10-15%'
...
'95-100%'
Я бы хотел преобразовать это в моем предложении select where только в первое число, 5, 10, 15 и т. д. так что я могу сравнить это значение с переданным в "at least this" значением.
Я перепробовал кучу вариаций на тему substring, charindex, convert и replace, но до сих пор не могу получить что-то, что работает во всех комбинациях.
Есть какие-нибудь идеи?
Я не знаю, работает ли это в SQL сервере, но в MySQL вы можете использовать несколько трюков для преобразования символьных данных в числа. Примеры из ваших выборочных данных:
"<5%" => 0
"5-10%" => 5
"95-100%" => 95
теперь очевидно, что это провалит ваш первый тест, но некоторых умных замен строк в начале строки будет достаточно, чтобы заставить его работать.
Один из примеров преобразования символьных данных в числа:
SELECT "5-10%" + 0 AS foo ...
Возможно, он не работает на сервере SQL, но будущие поиски могут помочь нечетному пользователю MySQL: - D
Вероятно, вам было бы гораздо лучше изменить <5% и 5-10% , чтобы сохранить 2 значения в 2 полях. Вместо того чтобы хранить <5%, вы будете хранить 0 и 5, а вместо 5-10% вы получите 5 и 10. Вы бы в конечном итоге с 2 колонки, одна называется нижняя граница, и называется верхним, а потом просто проверить значение >= нижняя граница стоимости AND < верхним.
Вы можете сделать это в sql server с помощью курсора. Если вы можете создать функцию CLR для извлечения группировок чисел, это поможет. Это возможно в T-SQL, просто будет некрасиво.
Создайте курсор для циклического перемещения по списку. Найдите первое число, если в них есть только 1 группа чисел, а затем верните его. В противном случае найдите вторую группу элементов.
если возвращена только 1-я группировка элементов и это первый элемент в списке, установите его в верхнюю границу. если возвращена только 1-я группировка элементов и это последний элемент в списке, установите для него нижнюю границу. В противном случае установите 1-ю группировку элементов в нижнюю, а 2-ю-в верхнюю границу
Просто установите полученные значения обратно в таблицу
Проблема, с которой вы столкнулись, - это симптом того, что вы не сохраняете атомарные данные. В данном случае это выглядит чисто непреднамеренно (наследие), но вот ссылка об этом.
Чтобы спроектировать себя из этого создайте таблицу range_lookup:
Create table rangeLookup(
rangeID int -- or rangeCD or not at all
,rangeLabel varchar(50)
,LowValue int--real or whatever
,HighValue int
)
Чтобы взломать себя здесь некоторые псевдо-шаги, это будет глубоко вложенный беспорядок.
normalize your input by replacing all your crazy charecters.
replace(replace(rangeLabel,"%",""),"<","")
--This will entail many nested replace statments.
Add a CASE and CHARINDEX to look for a space if there is none you have your number
else use your substring to take everything before the first " ".
-- theses steps are wrapped around the previous step.
Это сложно, но для тестовых случаев, которые вы предоставили, это работает. Просто замените @Test столбцом, в который вы смотрите из своей таблицы.
DECLARE @TEST varchar(10)
set @Test = '<5%'
--set @Test = '5-10%'
--set @Test = '10-15%'
--set @Test = '95-100%'
Select CASE WHEN
Substring(@TEST,1,1) = '<'
THEN
0
ELSE
CONVERT(integer,SUBSTRING(@TEST,1,CHARINDEX('-',@TEST)-1))
END
AS LowerBound
,
CASE WHEN
Substring(@TEST,1,1) = '<'
THEN
CONVERT(integer,Substring(@TEST,2,CHARINDEX('%',@TEST)-2))
ELSE
CONVERT(integer,Substring(@TEST,CHARINDEX('-',@TEST)+1,CHARINDEX('%',@TEST)-CHARINDEX('-',@TEST)-1))
END
AS UpperBound