INTERBASE

12 отговора 605 прегледа
#1

INTERBASE

Здравейте

Можете ли да ми кажете в SELECT зявка как да използвам LIKE '%нещо%' при положение че "нещото" е променлива :var

примерно: SELECT COUNT(*) FROM X WHERE FIELDS LIKE :x <- тук е проблема не може да се използва прочент защото ще трябва да сложа и апострофи.

Предварително благодаря

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

Re: INTERBASE

SELECT COUNT(*) FROM X WHERE FIELDS LIKE '%' || :x || '%'

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

Re: INTERBASE

Незнам защо но не става в интерес на истината
Ползвам твоя пример и нещо не върви

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

Re: INTERBASE

i kak go polzwash. Ot nyakakwa SQL zayawka, kato stored procedure ili kak. Pri mene towa raboti :


create procedure test_variable ( var varchar(100) )
returns ( cnt integer )
as
begin
select count(*) from a_table where a_field like '%' || :var || '%' into :cnt;
suspend;
end


Interbase LI-V6.0.1.0

Редактирано от killall на

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

Re: INTERBASE

Wsyshtnost sega kato se zamislya wyobshte ne ti tryabwa da polzwash like. Mojesh i taka, po-dobre mi izglejda nyakak si :

select count(*) from a_table where a_field containing :x

Отговор
в отговор на killall #6

Re: INTERBASE

Нямам представа какво става

Имам процедура с 3 входящи параметъра и един който се връща. Имам една таблица с думи. Искам да проверя в изречението което подавам има ли дума от таблицата с думи това е нищо повече и неще и това си е.

Отговор
в отговор на aginor #7

Re: INTERBASE

Ako pastnesh tuka i kak go prawish tochno towa deto ne stawa moje i da izmislim neshto ...

Отговор
в отговор на killall #8

Re: INTERBASE

CREATE PROCEDURE DBINSERT (
MESSAGE VARCHAR (180),
DATETIME DATE,
PHONE CHAR (20))
RETURNS (
RESULT SMALLINT)
AS

BEGIN
SELECT COUNT(WORDS.WORD) FROM WORDS
WHERE WORDS.WORD LIKE '%'||:MESSAGE||'%' INTO :COUNTWORD;
SUSPEND;
END


Където в таблица WORDS да речем има дума: ЯБЪЛКА, а MESSAGE e: ЗЛАТНАТА ЯБЪЛКА

Отговор
в отговор на aginor #9

Re: INTERBASE

Ami estestweno che nyama da stawa.

WORDS.WORD LIKE '%'||:MESSAGE||'%'

ti proweryawa ne dali dali wyw words.word se sydyrja messge, a ne obratnoto, kakto wsyshtnost tryabwa da e :))

Probwaj towa :

SELECT COUNT(WORDS.WORD) FROM WORDS
WHERE :MESSAGE CONTAINING WORDS.WORD INTO :COUNTWORD;

Отговор
в отговор на killall #10

Re: INTERBASE

Най - интересното е, че това също не работи

Отговор
в отговор на aginor #11

Re: INTERBASE

Трябва или на клиента или в UDF да отделяш думите съдържащи се в MESSAGE и като параметър в SELECT COUNT(WORDS.......... да подаваш отделни думи

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

Re: INTERBASE

Ми това с разбиването не е вариант исках цялото изречение да го подавам и да търси в таблицата с думите кое го има и кое не.

Отговор
в отговор на aginor #13

Re: INTERBASE

Da ti imam i obyasneniyata :))
Koe ne raboti - ne se kompilira, ne dawa werni rezultati, ne dawa nikakwi rezultati, ne dawa wsichki rezultati ....

Specialno zaradi tebe si naprawih slednoto :



CREATE TABLE WORDS (
ID_WORDS INTEGER NOT NULL,
WORD VARCHAR (255) character set WIN1251 collate WIN1251);


ALTER TABLE WORDS ADD CONSTRAINT PK_WORDS PRIMARY KEY (ID_WORDS);

SET TERM ^ ;

CREATE TRIGGER AI_WORDS_ID_WORDS FOR WORDS ACTIVE
BEFORE INSERT POSITION 0
AS
BEGIN
NEW.ID_WORDS = GEN_ID(WORDS_ID_WORDS_GEN, 1);
END
^

CREATE PROCEDURE GET_WORD_COUNT (
SENTENCE VARCHAR (10000))
RETURNS (
WORDCOUNT INTEGER)
AS
BEGIN
select
count(*)
from words
where
:sentence containing word
into
:wordcount;
SUSPEND;
END
^

SET TERM ; ^

INSERT INTO WORDS (WORD) VALUES ('red');
INSERT INTO WORDS (WORD) VALUES ('blue');
INSERT INTO WORDS (WORD) VALUES ('green');
INSERT INTO WORDS (WORD) VALUES ('alabala');
INSERT INTO WORDS (WORD) VALUES ('apple');


select * from get_word_count("red alert apple blue");

WORDCOUNT
---------------
3




Ta kakwo tochno wikash che ne rabotelo ?!??!?!

Отговор