Сравняване на стрингове в Interbase

3 отговора 441 прегледа
#1

Сравняване на стрингове в Interbase

Може би съм тръгнал в грешна насока, затова първо ще опишя проблема.
Ползвам база Interbase и искам заявка която взима от дадена таблица поле NAME VARCHAR(10). В таблицата има и поле CODE VARCHAR (6). Заявката е следната:
SELECT NAME FROM MYTABLE WHERE CODE LIKE "PARAMETUR%". Значи трябва да SELECT-на всички записи, на които полето код ЗАПОЧВА с подниза PARAMETUR. Нека в MyTable има два записа - единия с CODE="123", а другия с CODE="123/1". Тогава заявката SELECT NAME FROM MYTABLE WHERE CODE LIKE "123%" ми връща и двата записа, но ПЪРВИ е този с CODE="123/1", а на мен ми трябва точно обратното-първо да бъдат най-точните съвпадения. Мисля че ако има начин да допълня заявката с нещо от рода на ORDER BY LENGHT(CODE) ASC ще се получи желания ефект. Проблема е че в Interbase не мога да намеря ф-ция която срявнява дължината на два стринга - вариант е да си напиша съответния UDF, но ми се струва нереално да няма нещо готово. И второ - някой знае ли по-добър начин избраните записи да се подреждат по дължината на полето CODE в нарастващ ред? Може би има начин да се промени малко таблицата, с която INTERBASE сравнява символите?

Отговор
в отговор на VladoVasilev #2

Re: Сравняване на стрингове в Interbase

SELECT CODE, NAME FROM MYTABLE WHERE CODE LIKE "123%" order by 1

Не съм сигурен, но мисля че IB7 може да сортира и по поле, което не се връща в заявката.

Отговор
в отговор на NDeu #3

Re: Сравняване на стрингове в Interbase

Че даже и в 6x го може...
но с функциите си е друга работа....Потърси /rfunc-2/ за съжаление не помня от къде съм го изтеглил....руско...много добро...

търси за "rFunc@mail.ru" ...предполагам ще те отведе където трябва...

Отговор
в отговор на VladoVasilev #4

Re: Сравняване на стрингове в Interbase



DECLARE EXTERNAL FUNCTION STRLEN
CSTRING (32767)
RETURNS INTEGER BY VALUE
ENTRY_POINT 'IB_UDF_strlen' MODULE_NAME 'ib_udf';




Time is like a drug. Too much of it kills you.
Отговор