2017-11-26 20 views
0

私はOracleの新機能で、この月の初日と最後の日(動的)のデータが必要です。ORA-00904: "NOV":無効な識別子

このような私のPHPコードを見て:

$date = Date('d-M-y'); 

// Query 
$query = "Select COUNT(*) FROM myTable WHERE CREATED 
      BETWEEN FIRST_DAY(TRUNC(TO_DATE(".$date."), 'MON')) AND 
        LAST_DAY(TRUNC(TO_DATE(".$date."), 'MON'))"; 

しかし、私は常にエラー

ORA-00904を取得: "11月":NOVは、無効な識別子

を正しい月 - 正しい?

+0

user10089632いや、@、それは私を助けていない:( –

+1

どのようにこの 'TO_DATEを(」"しようとしてについて。 $ date。 "、" DD-MON-YY ")両方の場所で? – user10089632

+0

[バインドパラメータ](http://php.net/manual/en/function.oci-bind-by-name.php)を使用する[この回答を参照してください(https://stackoverflow.com/questions/7066978/oci-bind-by-name-and-to-date-php-oci-oracle) – MT0

答えて

3

は、Oracleに任せる場合は、作成した上でインデックスを持っている場合、それは答えるしようとしているため

$query = "Select COUNT(*) FROM myTable WHERE CREATED >= TRUNC(SYSDATE,'MON') AND CREATED < TRUNC(ADD_MONTH(SYSDATE,1),'MON') 
+0

良い、私は最初に投票しました2番目の 'TRUNC(ADD_MONTHS(SYSDATE、1)、 'MON')'(yyyymmddの形式のように) '20171201'が得られ、範囲から除外されなければなりません –

+0

@BarbarosÖzhan、 20171201 00:00:00.000が含まれています。アプリケーションの現実的な日付(または時間の部分が保存されていない)の場合は、余分に除外する必要があります。 – Turo

+0

bwtweenを> =に置き換え、 – Turo

0

感謝を使用する方が速いかもしれないが、私はこれを得た

$query = "Select COUNT(*) FROM myTable WHERE TRUNC(SYSDATE,'MON') = TRUNC(CREATED,'MON')"; 

を使用することができます私の問題解決するために:月の最初の日を得るため

を私が使用:

"TRUNC(TO_DATE('".$date."', 'DD-MM-YY'), 'MM')" 
最後の日のための

、使用:

"LAST_DAY(TO_DATE('".$date."', 'DD-MM-YY'))"