powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Interbase + Delphi
10 сообщений из 10, страница 1 из 1
Interbase + Delphi
    #32544083
Фотография Bol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема перекочевывает из "работы" - так что предисторию см. там.

На вопрос нормально (без 999*2 union-ов) не ответил никто...
возможно нормльного ответа и нет, но как это доказать?

есть таблица T1
(ID integer перв.ключ
Code varchar(20) - содержит код - комбинация букв и цифр
например '12Ф443КП44'
'ОЛР993ПИМ00Е446'
'ОР99ЩКЛЫ33')


есть табл. T2
(ID integer pk
SubCode integer - содержит от одной до трех цифр
например 1, 233, 445, 4, 22 и т.д.)

надо написать одним запросом (без исп. ХП) чтобы в выводе были только те
коды (Code) которые заканчиваются на цифру(цифры) из поля SubCode, причем сравнение Code с SubCode начинается в поле Code с правого разряда
и допускается частичное совпадение т.е. вывод д.б.

'12Ф443КП44' - совпадает с 4
'ОР99ЩКЛЫ33' - совпадает с 233 (частичное совпадение)

напомню, что длина Code ограничена 20, но заранее не известна.
Наверное нужно использовать Length для получения длины и Substr для
поиска подстроки, а также Cast для приведения типов
...
Рейтинг: 0 / 0
Interbase + Delphi
    #32544133
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оригинал здесь
/topic/95935
...
Рейтинг: 0 / 0
Interbase + Delphi
    #32544396
doroshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bol> Копнин Александр ТОЛЬКО ЗАПРОС ТО РАБОТАТЬ БУДЕТ, ЕСЛИ ПОРЯДОК ОДИНАКОВ А ПО УСЛОВИЮ

-- надо написать одним запросом (без исп. ХП) чтобы в -- выводе были только те коды (Code) которые заканчиваются -- на цифру(цифры) из поля SubCode, причем сравнение Code -- с SubCode начинается в поле Code с правого разряда-- и допускается частичное совпадение т.е. вывод д.б.
ТО ЕСТЬ (если упростить) соde='......123' subcode=321 or 32 or 3 or 2 or 1=>
тогда будет выбрана данная запись.

Кроме того надо определить, когда (с конца начиная) закончились цифры
и прекратить сравнение.

А можно поподробнее?
Если code='.....123', а subcode=1 надо ли выбирать запись? Как по мне, то не надо, это противоречит условию "... выводе были только те коды (Code) которые заканчиваются -- на цифру(цифры) из поля SubCode". И ИМХО запрос предложенный Копниным Александром будет работать корректно.

А вообще - вот эти конструкции разложат subcode на разряды
Код: plaintext
1.
2.
3.
старший разряд:       cast(cast(subcode/ 100 - 0 . 5  as integer) as varchar( 20 )),
средний разряд:       cast(cast((subcode-cast(subcode/ 100 - 0 . 5  as integer)* 100 )/ 10 - 0 . 5  as integer) as varchar( 20 )),
младший разряд:       cast(cast((subcode/ 10 -cast(subcode/ 10 - 0 . 5  as integer))* 10  as integer) as varchar( 20 ))

а с ними потом можно делать что захотите, и сравнивать хоть справа налево, хоть слева направо, хоть по одной цифре, хоть по две ;)
ЗЫ по условию, subcode содержит от одной до трех цифр.
...
Рейтинг: 0 / 0
Interbase + Delphi
    #32544642
Фотография Bol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>doroshka
1)Откуда я знаю, сколько разрядов надо брать?
2)Если в code есть ...324 а в subcode 42 то вывод должен быть, а 43 - нет
Пожалуйста без гипотез, а с готовыми решениями.
Я уже похвалил господина Копнина за направление, кот. он дал, но оно не привело меня к верному решению поставленной задачи.
Я проверил - и вы проверьте - подставьте разные данные и убедитесь в этом.
Bol
...
Рейтинг: 0 / 0
Interbase + Delphi
    #32544661
Фотография Bol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>doroshka
Add
Если в subkode , например , 2 цифры '3' и '4' , а в code присутствуют, например '53' то это не значит, что выполняется поставленное условие.

По моему в IB нет ф-й IIF(только в Yaffil) или case.. when.. then.. или
length и все эти вопросы м. решить только через udf

Bol
...
Рейтинг: 0 / 0
Interbase + Delphi
    #32544688
Фотография Bol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>doroshka
Если исключить обратный путь сравнения - то вроде бы всё нормально, а по условию сравнение идет зеркальным способом.
Bol
...
Рейтинг: 0 / 0
Interbase + Delphi
    #32544691
Фотография Castor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Bol
2)Если в code есть ...324 а в subcode 42 то вывод должен быть, а 43 - нет
нет, если в Code 324 а subcode 42 то вывода быть не должно. Имелось ввиду сравнивать с конца но не переворачивать т.е. если бы subcode было 324 24 или 4 - то только тогда выбирать
...
Рейтинг: 0 / 0
Interbase + Delphi
    #32544770
doroshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен с Castor . Тем более он является постановщиком задачи :).

А при такой постановке, где подходят и частичные совпадения, действительно, достаточно проверить чтоб последняя цифра (младший разряд) subcode совпадала с последним символом code. Этот вариант и был предложен господином Копниным.

Хочу предложить еще такой вот вариант, который показывает где полное совпадение, а где частичное. Он удобен для тестирования.

Код: plaintext
1.
2.
3.
4.
5.
select code, subcode, cast ('full' as varchar( 10 )) from t1, t2
where code like '%'||cast(subcode as varchar( 20 ))
union
select code, subcode, cast ('partial' as varchar( 10 )) from t1, t2
where code like '%'||cast(cast((subcode/ 10 -cast(subcode/ 10 - 0 . 5  as integer))* 10  as integer) as varchar( 20 )) 
  and code not like '%'||cast(subcode as varchar( 20 ))



Bol
Можно усложнить задачу так как Вы хотите, тогда сформулируйте условие четко и ясно, с примерами того что должно выбираться, а что нет. Поламаем еще немного голову... ;)
...
Рейтинг: 0 / 0
Interbase + Delphi
    #32544774
Фотография Bol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Castor
Если так - то браво господину Копнину и закрывай топик
PS: а зеркально тоже бы хотелось...
Bol
...
Рейтинг: 0 / 0
Interbase + Delphi
    #32545206
Фотография Castor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Bol
а запрос то ничего не выбирает Code null
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Interbase + Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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