используя оператор like в запросе базы данных html5 - PullRequest
0 голосов
/ 29 июня 2011

У меня есть html5-запрос, который отлично работает следующим образом:

tx.executeSql('SELECT * 
                 FROM bdreminders
                WHERE firstname = IFNULL(?, firstname) 
                  AND lastname =  IFNULL(?, lastname) 
                  AND baughtgift = IFNULL(?, baughtgift) 
             ORDER BY firstname asc',
              [passedfn,passedln,passedbg],renderFunc,birthdayapp.onError);

Однако я хочу использовать оператор "like" вместо "=", но не знаю, как реализовать его с помощью IFNULL.

Ответы [ 2 ]

0 голосов
/ 29 июня 2011

Если вы просто замените '=' оператором LIKE, вы получите тот же самый ответ с точным соответствием, что и ваш текущий запрос.Я предполагаю, что вы хотели бы использовать оператор LIKE, чтобы сделать что-то другое (например, a начинается с поиска).

Я предоставил вам, как базы данных SQL обычно делают это, но если это работает для вас, зависит от того, насколько SQL совместимдиалект SQL, используемый движком HTML5:

Во-первых, это зависит от синтаксиса конкатернизации.Во-вторых, это зависит от конкатернизации при использовании NULL + строка, создающая NULL или строку.Большинство профессиональных баз данных выдают NULL (это хорошо для вас, потому что тогда это будет работать).

Следующее должно работать на MySQL или Oracle и некоторых других базах данных:

SELECT * FROM bdreminders
WHERE firstname LIKE IFNULL( CONCAT(?,'%'), firstname)
AND lastname LIKE IFNULL( CONCAT(?,'%'), lastname)
AND baughtgift LIKE IFNULL( CONCAT(?,'%'), baughtgift)
ORDER BY firstname asc

или (для Oracle, Postgre и других)

SELECT * FROM bdreminders
WHERE firstname LIKE IFNULL( ? ||'%', firstname)
AND lastname LIKE IFNULL( ? || '%', lastname)
AND baughtgift LIKE IFNULL( ? || '%', baughtgift)
ORDER BY firstname asc

или (для SQL-сервера и других)

SELECT * FROM bdreminders
WHERE firstname LIKE IFNULL( ? +'%', firstname)
AND lastname LIKE IFNULL( ? + '%', lastname)
AND baughtgift LIKE IFNULL( ? + '%', baughtgift)
ORDER BY firstname asc

Сначала я бы попробовал последний.Если вышеприведенное не работает и вы получаете все bdreminders, база данных не конвертирует строку NULL + в NULL.В этом случае я не думаю, что вы можете использовать ISNULL, так как он вернет первое ненулевое значение и, таким образом, всегда вернет «%».

0 голосов
/ 29 июня 2011

вся конструкция IFNULL(?,xxx) должна возвращать значение.

вы должны иметь возможность использовать это значение внутри оператора LIKE так же, как вы используете его с оператором =.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...