Interbase - left() v SQL

4 отговора 134 прегледа
#1

Interbase - left() v SQL

Rabotja s Interbase bazi danni prez EMS Interbase/Firebird Manager.
Problem4eto mi e 4e kogato se opitam da izgradja SQL zajavka s functijata left nisto ne stava. Primer:
select cash.code,cash.money
from cash,recitems
where cash.code=left(recitems.stock,4);
Vrasta se greshka 4e funkcijata left e nepoznata, a v sastoto vreme kogato pisha zajavkata mi se pojavjava help menuto na zapazenite SQL dumi, kadeto ja ima.
Njakoi ima li ideja kakvo stava????
Kakva druga SQL funcija da izpolzvam za 4ast ot string???

Отговор
в отговор на sql-shash #2

Re: Interbase - left() v SQL

Ползвай starting with
Left е запазена дума от left join

Направи си труда в българските форуми да пишеш на български

Отговор
в отговор на sql-shash #3

Re: Interbase - left() v SQL

Вярно, че с друг сървър, а не с Interbase, използвам POS.

... where POS (... , ... , ...) = 1 или > 1

Не съм изследвал за бързодействие, защото съм го използвал при малки бази.

ЧеФо
Отговор
в отговор на sql-shash #4

Re: Interbase - left() v SQL

В Interbase няма left. Ползвай substr :


DECLARE EXTERNAL FUNCTION SUBSTR
CSTRING (80),
SMALLINT,
SMALLINT
RETURNS CSTRING (80) FREE_IT
ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf';

select cash.code,cash.money
from cash,recitems
where cash.code=substr(recitems.stock,1,4);


Отговор
в отговор на Chefo #5

Re: Interbase - left() v SQL

На IB/FB не е проблем да се използва, каквато си измислиш функция (UDF), както и по-долу е посочил killall (впрочем във FB 1.5, а мисля и в IB7 SUBSTR e вградена), но такава заявка няма шанс да използва индекси.

Аз бих написал заявката:
select cash.code,cash.money
from cash,recitems
where recitems.stock starting with cash.code;

Отговор