2011-06-29 5 views
0

におけるオペレータのように使用して:私はこのような正常に動作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); 

しかし、私は「のような」演算子の代わりに「=」が、どのように知らないを使用したいですIFNULLを使用して実装します。

+0

使用しているデータベースにタグを付けてください。すべて同じではありません。 –

答えて

0

単に '='をLIKE演算子に置き換えると、現在のクエリと同じ完全一致の答えが得られます。私はLIKE演算子を使って、何か違うことをしたいと思っています。

SQLデータベースがこれを通常どのように行うのかを説明しましたが、これが機能するかどうかは、HTML5エンジンで使用されているSQLダイアレクトがどのようにSQLと互換性があるかによって異なります。

まず、concaternation構文に依存します。次に、NULL + stringを使用してconcaternationに依存し、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 

または(オラクル、Postgre用など)

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

または(SQLサーバー用など)

私は最後のものを最初に試してみます。上記がうまく動作せず、すべてのbdremindersを取得した場合、データベースはNULL + stringをNULLにconcatenateしません。この場合、ISNULLは最初の非NULL値を返し、常に '%'を返すので、私はあなたがISNULLを使用できるとは思いません。

0

IFNULL(?,xxx)構成全体が値を返す必要があります。

オペレーターと同じように、LIKEオペレーター内でこの値を使用することができます。

関連する問題