|
|
|
Interbase + Delphi
|
|||
|---|---|---|---|
|
#18+
Тема перекочевывает из "работы" - так что предисторию см. там. На вопрос нормально (без 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 для приведения типов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 10:18:57 |
|
||
|
Interbase + Delphi
|
|||
|---|---|---|---|
|
#18+
оригинал здесь /topic/95935 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 10:33:37 |
|
||
|
Interbase + Delphi
|
|||
|---|---|---|---|
|
#18+
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. а с ними потом можно делать что захотите, и сравнивать хоть справа налево, хоть слева направо, хоть по одной цифре, хоть по две ;) ЗЫ по условию, subcode содержит от одной до трех цифр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 11:48:39 |
|
||
|
Interbase + Delphi
|
|||
|---|---|---|---|
|
#18+
>doroshka 1)Откуда я знаю, сколько разрядов надо брать? 2)Если в code есть ...324 а в subcode 42 то вывод должен быть, а 43 - нет Пожалуйста без гипотез, а с готовыми решениями. Я уже похвалил господина Копнина за направление, кот. он дал, но оно не привело меня к верному решению поставленной задачи. Я проверил - и вы проверьте - подставьте разные данные и убедитесь в этом. Bol ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 13:34:55 |
|
||
|
Interbase + Delphi
|
|||
|---|---|---|---|
|
#18+
>doroshka Add Если в subkode , например , 2 цифры '3' и '4' , а в code присутствуют, например '53' то это не значит, что выполняется поставленное условие. По моему в IB нет ф-й IIF(только в Yaffil) или case.. when.. then.. или length и все эти вопросы м. решить только через udf Bol ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 13:41:27 |
|
||
|
Interbase + Delphi
|
|||
|---|---|---|---|
|
#18+
>doroshka Если исключить обратный путь сравнения - то вроде бы всё нормально, а по условию сравнение идет зеркальным способом. Bol ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 13:50:53 |
|
||
|
Interbase + Delphi
|
|||
|---|---|---|---|
|
#18+
> Bol 2)Если в code есть ...324 а в subcode 42 то вывод должен быть, а 43 - нет нет, если в Code 324 а subcode 42 то вывода быть не должно. Имелось ввиду сравнивать с конца но не переворачивать т.е. если бы subcode было 324 24 или 4 - то только тогда выбирать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 13:51:16 |
|
||
|
Interbase + Delphi
|
|||
|---|---|---|---|
|
#18+
Согласен с Castor . Тем более он является постановщиком задачи :). А при такой постановке, где подходят и частичные совпадения, действительно, достаточно проверить чтоб последняя цифра (младший разряд) subcode совпадала с последним символом code. Этот вариант и был предложен господином Копниным. Хочу предложить еще такой вот вариант, который показывает где полное совпадение, а где частичное. Он удобен для тестирования. Код: plaintext 1. 2. 3. 4. 5. Bol Можно усложнить задачу так как Вы хотите, тогда сформулируйте условие четко и ясно, с примерами того что должно выбираться, а что нет. Поламаем еще немного голову... ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 14:18:44 |
|
||
|
Interbase + Delphi
|
|||
|---|---|---|---|
|
#18+
>Castor Если так - то браво господину Копнину и закрывай топик PS: а зеркально тоже бы хотелось... Bol ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2004, 14:20:13 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32544133&tid=1578534]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
215ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 534ms |

| 0 / 0 |
