在html5数据库查询中使用like运算符

时间:2011-06-29 17:17:45

标签: mysql sql html5

我有一个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 :(得分:0)

整个IFNULL(?,xxx)构造应该返回一个值。

您应该能够在LIKE运算符中使用此值,就像您将其与=运算符一起使用一样。

答案 1 :(得分:0)

如果只是用LIKE运算符替换'=',您将获得与当前查询完全匹配的答案。我假设您想使用LIKE运算符执行不同的操作(例如以搜索开头)。

我为您提供了SQL数据库通常如何执行此操作,但是如果这适用于您,则取决于SQL5与HTML5引擎使用的SQL方言的兼容性。

首先,它取决于concaternation语法。其次,它依赖于使用NULL + string生成NULL或字符串的concaternation。大多数专业数据库都会产生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 + string挂接到NULL。在这种情况下,我认为您不能使用ISNULL,因为它将返回第一个非null值,因此始终返回'%'。