Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка строк / 24 сообщений из 24, страница 1 из 1
02.07.2004, 15:57:15
    #32587494
AlexPort
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
Задача такая. Есть таблица в которой есть текстовое поле, назовём его somefield. Значения этого поля от '1' до '1000'.
Нужно выбрать в запросе только те записи которые сожержат поле значения поля somefield в интервале от '1' до '5'.
Пишу запрос

Select * from sometable where somefield between '1' and '5'

выполняю и получаю все записи в которых сомфёлд начинаеть с 1 по 5. Почемуто файербёрд сравнивает только начальные символы. И если одна строка короче другой, но являеться её подстрокой, то они считаються равными.

Что с этим можно сделать?
...
Рейтинг: 0 / 0
02.07.2004, 16:09:21
    #32587523
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
Код: plaintext
CAST(somefield AS INTEGER)
...
Рейтинг: 0 / 0
02.07.2004, 19:56:19
    #32587906
AlexPort
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
Хорошо, а если значения полей будут 'sometext1', 'sometext2', ...., 'sometext n'
тогда что?
...
Рейтинг: 0 / 0
02.07.2004, 20:12:46
    #32587919
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
AlexPortПочемуто файербёрд сравнивает только начальные символы. И если одна строка короче другой, но являеться её подстрокой, то они считаються равными.
Что с этим можно сделать?
Прочитать документацию. И книжечки по SQL.
Конструкция where somefield between '1' and '5' есть эквивалент конструкции where (somefield >= '1') and (somefield <= '5').
Сравнение же строковых типов на > и < производится аналогично виндовым
функциям, типа AnsiStrComp() и пр.
...
Рейтинг: 0 / 0
02.07.2004, 20:20:16
    #32587921
AlexPort
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
Я это понял ещё до того как задавать свой вопрос.
Перечитай, пожалуйста, моё первое сообщение. Там спрашиваеться не почему это происходит, а как это обойти.
...
Рейтинг: 0 / 0
02.07.2004, 20:33:02
    #32587928
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
Конкретно укажи условия. Не абстрактно.
От этого зависит собственно и построение запроса.
Можно завернуть на SUBSTRING.
Можно попытаться взять на STARTING WITH.
Можно на LIKE.
Всё зависит от условий задачи.
...
Рейтинг: 0 / 0
05.07.2004, 12:20:43
    #32589171
AlexPort
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
Условие такое:
выбрать из таблицы все записи в которых поле Cod находиться в интервале от Cod1 до Cod2. Где Cod, Cod1 и Cod2 имеют строковый тип!
Например:
'Cod1'
'Cod2'
'Cod3'
'Cod10'
'Cod20'
'Cod30'

Если Cod1='Cod1' Cod2='Cod3' то результатом запроса должны быть первые 3 записей, но никак не все 6 как в случак с Between.
...
Рейтинг: 0 / 0
05.07.2004, 12:45:25
    #32589250
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
Код: plaintext
1.
2.
SELECT * FROM tab1 T1
WHERE (CAST(SUBSTRING(T1.Cod FROM  4 ) AS INTEGER) BETWEEN  2  AND  3 )
  AND (T1.Cod STARTING WITH 'Cod')
Обрати внимание на порядок следования предикатов в клаузе WHERE.
FireBird 1.5 обрабатывает условия справа-налево.
Именно поэтому, условие (T1.Cod STARTING WITH 'Cod') должно быть
завершающим. Чтоб обрабатывалось первым.
Ибо если таблица содержит разнородные данные, то можно получить
исключение при кастинге.
...
Рейтинг: 0 / 0
05.07.2004, 12:50:02
    #32589263
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
BETWEEN 1 AND 3
...
Рейтинг: 0 / 0
05.07.2004, 13:23:18
    #32589357
AlexPort
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
Ну неужели непонятно, что пользователь может ввести вместо Код всё что угодно. и не обязательно что одно слово будет повторяться во всех полях.

Короче я понял, что помощи тут я не дождусь,
вам ребята фантазии не хватает.

Особенно меня порадовал последний ответ. Спасибо. Развеселили меня, огорчённого проиграшем португалии.
...
Рейтинг: 0 / 0
05.07.2004, 13:25:40
    #32589364
AlexPort
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
Скажи мне хоть, почему FierBird не понимает функцию Length
...
Рейтинг: 0 / 0
05.07.2004, 13:26:16
    #32589367
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
Тебе же, мля, сказано было: конкретные условия !
Нет, мля, начинается: "...пользователь может ввести вместо Код всё что угодно"
...
Рейтинг: 0 / 0
05.07.2004, 13:41:46
    #32589400
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
AlexPortКороче я понял, что помощи тут я не дождусь,
вам ребята фантазии не хватает.

Вам бы базу перепроектировать. Если делать все правильно, фантазию редко приходится применять, хватает всего, что есть в фаерберде

AlexPortОсобенно меня порадовал последний ответ. Спасибо. Развеселили меня, огорчённого проиграшем португалии.

Ответ был корректный для тех условий, что вы указали. Если вы хотите анализировать строки, выделяя из них цифры или что-то в этом роде, используйте UDF (в том числе strlen и т.п.). Если вы хотите как-то это дело корректно сортировать, разнесите цифры и буквы по разным полям, например.
...
Рейтинг: 0 / 0
05.07.2004, 14:00:06
    #32589447
Лентяй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
Ну неужели непонятно, что пользователь может ввести вместо Код всё что угодно. и не обязательно что одно слово будет повторяться во всех полях.
Ну неужели тут всем больше делать нечего, кроме как додумывать туманно заданные вопросы.
Короче я понял, что помощи тут я не дождусь,
Информации тебе выдали вполне достаточно, чтобы справиться с твоей проблемкой.
вам ребята фантазии не хватает.
Воспаленной?
Особенно меня порадовал последний ответ. Спасибо. Развеселили меня
Ты меня тоже. Не пропадай, заходи еще.
...
Рейтинг: 0 / 0
05.07.2004, 15:16:17
    #32589640
Denis Uskov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
AlexPortУсловие такое:
выбрать из таблицы все записи в которых поле Cod находиться в интервале от Cod1 до Cod2. Где Cod, Cod1 и Cod2 имеют строковый тип!
Например:
'Cod1'
'Cod2'
'Cod3'
'Cod10'
'Cod20'
'Cod30'
А ты попробуй сделать order by по этому полю и увидишь какая будет сортировка. И почитать что-нибудь про правила сравнения строк.
------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
05.07.2004, 17:44:41
    #32590005
AlexPort
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
Лентяй[quot ]
Ну неужели тут всем больше делать нечего, кроме как додумывать туманно заданные вопросы.

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

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

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

Единственный, кто хоть немного меня понял - это fedd. Спасибо тебе за ответ.

А всем остальным желаю поступить в ВУЗ. И попробуйте заплатить комиссии, а то просто так вас не примут.

Спасибо за внимание.
...
Рейтинг: 0 / 0
05.07.2004, 17:49:02
    #32590017
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
Вам сюда .
...
Рейтинг: 0 / 0
05.07.2004, 18:03:04
    #32590044
Лентяй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
А ты какой вуз закончил?

Select * from sometable where somefield between '1' and '5'

выполняю и получаю все записи в которых сомфёлд начинаеть с 1 по 5. Почемуто файербёрд сравнивает только начальные символы. И если одна строка короче другой, но являеться её подстрокой, то они считаються равными.

У меня ребенок учиться в пятом классе, но даже он уже понимает по какому принципу сортирруются строки.

Удачи.
...
Рейтинг: 0 / 0
05.07.2004, 18:34:28
    #32590097
AlexPort
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
»» Мимохромающий


Спасибо большое, вас туда же!
...
Рейтинг: 0 / 0
05.07.2004, 18:35:23
    #32590098
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
О! Вернулся!
...
Рейтинг: 0 / 0
05.07.2004, 18:36:06
    #32590099
AlexPort
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
авторИнформации тебе выдали вполне достаточно, чтобы справиться с твоей проблемкой.


Так чего же ты мне решение не напишешь?
...
Рейтинг: 0 / 0
05.07.2004, 18:38:43
    #32590102
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
AlexPort.....
Единственный, кто хоть немного меня понял - это fedd. Спасибо тебе за ответ.
.....


Пожалуйста.

В данном вопросе я поддерживаю Мимопроходящего. Вас поняли все, просто я вежливее. Попрошу не делать больше постингов не по теме. Обиды и флейм буду удалять. Задавайте конкретные вопросы.
...
Рейтинг: 0 / 0
05.07.2004, 18:40:35
    #32590103
AlexPort
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
И ты Брут ...

[ну просил же! к порядку плиз! говорю тебе, МП прав. не обижайся и сам не лезь в драку. тут люди с большим опытом, при должном уважении к ним они смогут тебе помочь, если ты им дашь помочь себе и если еще не обиделись (подписался: fedd)]
...
Рейтинг: 0 / 0
06.07.2004, 08:57:02
    #32590512
Nikola18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка строк
AlexPortУсловие такое:
выбрать из таблицы все записи в которых поле Cod находиться в интервале от Cod1 до Cod2. Где Cod, Cod1 и Cod2 имеют строковый тип!
Например:
'Cod1'
'Cod2'
'Cod3'
'Cod10'
'Cod20'
'Cod30'

Если Cod1='Cod1' Cod2='Cod3' то результатом запроса должны быть первые 3 записей, но никак не все 6 как в случак с Between.

Делается это через так:

'Cod001'
'Cod002'
'Cod003'
'Cod010'
'Cod020'
'Cod030'
'Cod100'
...

и between 'Cod001' and 'Cod003'
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка строк / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]