Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
theMoL
7 / 7 / 2
Регистрация: 09.10.2011
Сообщений: 30
1

Как сравнить два значения?

15.12.2011, 12:09. Просмотров 2709. Ответов 11
Метки нет (Все метки)

Необходимо выбрать все цифры от 100 до 150
в таблице есть значение 10?, вместо ? может быть любое значение от 0-9.
Значение 10? может входить в диапазон 100-150

Как написать запрос, чтобы значение 10? попало в результат выборки?

Я понимаю, так необходимо сделать перечень возможных значение 10? и проверить подходит ли хоть одно значение из возможных под условие 100-150
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2011, 12:09
Ответы с готовыми решениями:

Сравнить два символа из строки с числом
Всем привет. Давно не заходил сюда) Есть задача, которую не могу решить пока,...

Как из одного столбца вывести значения в два столбца
Не могу никак разобраться, помогите пожалуйста.. Есть две таблицы: Team(id,...

Как сравнить метаданные 2х баз
Стоит задача сравнения структуры 2х баз MsSql. Буду благодарен если, кто -...

Как сравнить DateTime с нужным значением?
Мне необходимо написать условие: сумма трех datetime = 0 Но суммирование...

Как сравнить несколько значений в строке?
Здравия всем! Появился вопрос, который я не знаю как правильно згуглить или...

11
Ice_and_Fire
483 / 295 / 36
Регистрация: 22.06.2011
Сообщений: 929
15.12.2011, 12:31 2
Цитата Сообщение от theMoL Посмотреть сообщение
в таблице есть значение 10?, вместо ? может быть любое значение от 0-9
Тогда это диапазон [100:109] и от в любом случае является подмножеством от 100 до 150
1
theMoL
7 / 7 / 2
Регистрация: 09.10.2011
Сообщений: 30
15.12.2011, 13:25  [ТС] 3
Тогда это диапазон [100:109] и от в любом случае является подмножеством от 100 до 150
Как условием в запросе это определить
0
Ksana_
92 / 46 / 22
Регистрация: 11.02.2010
Сообщений: 187
15.12.2011, 13:39 4
Если тип поля текстовый, то можно попробовать функцию Like и заменить последний символ, символом %, вроде такого like(10%)..
0
Ice_and_Fire
483 / 295 / 36
Регистрация: 22.06.2011
Сообщений: 929
15.12.2011, 14:24 5
SQL
1
WHERE (поле BETWEEN 100 AND 150)
0
theMoL
7 / 7 / 2
Регистрация: 09.10.2011
Сообщений: 30
15.12.2011, 15:37  [ТС] 6
SQL
1
WHERE (поле BETWEEN 100 AND 150)
Это условие будет выдавать ошибку на значения содержащих ?

Как мне выбрать запросом из набора значений (90, 14?, 100, 150, 300, 1??, 15?) значения которые >= 100 AND <=150 при условии что ? это возможное значение от 0 до 9?
Результат должен быть 14?, 100,150, 1??;
0
Ksana_
92 / 46 / 22
Регистрация: 11.02.2010
Сообщений: 187
15.12.2011, 16:33 7
Цитата Сообщение от theMoL Посмотреть сообщение
SQL
1
WHERE (поле BETWEEN 100 AND 150)
Это условие будет выдавать ошибку на значения содержащих ?

Как мне выбрать запросом из набора значений (90, 14?, 100, 150, 300, 1??, 15?) значения которые >= 100 AND <=150 при условии что ? это возможное значение от 0 до 9?
Результат должен быть 14?, 100,150, 1??;
Используйте Like, у Вас же текстовое поле
0
Ice_and_Fire
483 / 295 / 36
Регистрация: 22.06.2011
Сообщений: 929
15.12.2011, 17:01 8
Цитата Сообщение от theMoL Посмотреть сообщение
SQL
1
WHERE (поле BETWEEN 100 AND 150)
Как мне выбрать запросом из набора значений (90, 14?, 100, 150, 300, 1??, 15?) значения которые >= 100 AND <=150 при условии что ? это возможное значение от 0 до 9?
Результат должен быть 14?, 100,150, 1??;
Условие 1?? не выполнимо. Это может быть 189 и не входить в диапазон
T-SQL
1
2
3
select *
from t
where  cast (REPLACE(Value,'?','0') as int ) between 100 and 150
0
theMoL
7 / 7 / 2
Регистрация: 09.10.2011
Сообщений: 30
15.12.2011, 17:14  [ТС] 9
А возможно ли каким-то образом в условии определять наличие знака '?' и в случае истины
создавать какой-то массив, в который занести все возможные варианты и уже потом определить есть ли в этом массиве значения которые подходят условию?
0
Ice_and_Fire
483 / 295 / 36
Регистрация: 22.06.2011
Сообщений: 929
15.12.2011, 17:26 10
КАК ты определиш, что 1?? это 145, а не 178 ? или что 15? это 150, а не 152
Своими словами попробуй это сделать...
0
Humanitis
176 / 168 / 27
Регистрация: 12.01.2009
Сообщений: 430
17.12.2011, 09:14 11
T-SQL
1
2
3
SELECT *
FROM t
WHERE  CAST (REPLACE(VALUE,'?','0') AS INT ) <=150 AND CAST (REPLACE(VALUE,'?','9') AS INT )>=100
1
theMoL
7 / 7 / 2
Регистрация: 09.10.2011
Сообщений: 30
20.12.2011, 12:40  [ТС] 12
Пробую решить задачу с помощью дочерней таблицы в виде
IDParentIDBeginVariantEndVariant
11100199
22100109

Вопрос: как построить запрос по уловию?
ЕСЛИ значение содержит '?' ТОГДА
строка подходит, если количество дочерних строк > 0 (условие отбора дочерних строк "@Value между BeginVariant и EndVariant")
ИНАЧЕ
значение подходит если оно > @Value
КОНЕЦЕСЛИ;

Пробный вариант:
SQL
1
2
3
4
5
6
WHERE 
  IF ([YEAR] LIKE '%?%')
         ((SELECT COUNT(ParentID) FROM subTable WHERE (parentID = ID) AND (@YEAR BETWEEN BeginVariant AND EndVariant)) > 0)
  ELSE
         (([YEAR] AS INT) > @YEAR)
  END IF;
Добавлено через 21 час 30 минут
Спасибо большое всем за помощь, благодаря вашим подсказкам все получилось)
Вообщем решилась задача при помощи дополнительной таблицы в которой содержатся варианты значениий содержащих ?
Пример главной таблицы:
IDYear
1 1943
2 194?
3 195?
4 1945
5 19??
Пример дополнительно таблицы:
IDParentIDBeginVarinat EndVariant
1 21940 1949
2 31950 1959
3 51900 1999
К примеру, нам необходимо выбрать даты входящие в период 1939-1944 из главной таблицы
Пример запроса:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT 
        [ID],
        [YEAR]
FROM 
        [TestDate] AS td
WHERE 
        1 = 
        CASE 
                WHEN [YEAR] LIKE '%?%' THEN 
                        (SELECT COUNT(ID) FROM [TestDateSubTable] AS std
                        WHERE (std.[ParentID] = td.ID) AND ((1939 BETWEEN [BeginVariant] AND [EndVariant]) OR (1944 BETWEEN [BeginVariant] AND [EndVariant])))
                WHEN [YEAR] NOT LIKE '%?%' THEN 
                        CASE 
                        WHEN [YEAR] BETWEEN 1939 AND 1944 THEN 1
                        END
        END
GO
Результат запроса:
IDYear
1 1943
2 194?
5 19??
0
20.12.2011, 12:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2011, 12:40

Как сравнить скорость работы запроса ДО и ПОСЛЕ оптимизации?
Собственно, есть БД. Оптимизацией занимаюсь первый раз. Есть запрос, который...

Как соединить два массива данных из базы или как извлекать условно связанные данные
Здравствуйте пользователь форума У меня проблема с передачей массива из БД в...

Подскажите пожалуйста как сравнить два значения
Имеется 20 вопросов, как сравнить ответы полученные от пользователя с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru