Сравняване на стрингове в Interbase
3 отговора
441 прегледа
Сравняване на стрингове в 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 сравнява символите?
Ползвам база 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 сравнява символите?
Re: Сравняване на стрингове в Interbase
SELECT CODE, NAME FROM MYTABLE WHERE CODE LIKE "123%" order by 1
Не съм сигурен, но мисля че IB7 може да сортира и по поле, което не се връща в заявката.
Не съм сигурен, но мисля че IB7 може да сортира и по поле, което не се връща в заявката.
Re: Сравняване на стрингове в Interbase
Че даже и в 6x го може...
но с функциите си е друга работа....Потърси /rfunc-2/ за съжаление не помня от къде съм го изтеглил....руско...много добро...
търси за "rFunc@mail.ru" ...предполагам ще те отведе където трябва...
но с функциите си е друга работа....Потърси /rfunc-2/ за съжаление не помня от къде съм го изтеглил....руско...много добро...
търси за "rFunc@mail.ru" ...предполагам ще те отведе където трябва...
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.