2016-04-07 4 views
-1

私は私のプロジェクトの最終段階にあり、仕事が遅れているかどうかを見つける問題があります。たとえば、ジョブの優先度が1の場合、1日で完了しなければならず、優先度は4日から4日でなければなりません。DATEDIFF SQLクエリ

私はケースを思いついたが、これはうまくいかない助けになりそうだ。

SELECT `defect_Id`,`Overtasked` 
WHERE 
    CASE DATEDIFF(DD,`date_Investigaton` - `CURRENT_DATE()`) >= `priority` AS Overtasked 
    THEN `Overtasked` == 'YES' 
    ELSE `Overtasked` == 'NO' 
END 

ソリューション

`SELECT defect_Id, 
    CASE WHEN DATEDIFF(date_Investigated, CURDATE()) >= priority 
    THEN 'YES' 
    ELSE 'NO' 
    END AS Overtasked 
    FROM defect_report 
    WHERE defect_Id = '82'` 

君たちが与える指導に感謝!

+2

タグdbmsが使用されました。いくつかのANSI以外のSQLもあります。 – jarlh

+0

また、current_date()の前後にあるバックティックを削除してください。 – jarlh

+0

Im WAMPサーバーとPHP myAdminを使用 –

答えて

0

SQLの方言が完全に混ざり合っており、構文エラーがあります。 はあなたがMS SQL Serverの話をしていると仮定するのは、これを試してみましょう:

SELECT defect_Id, 
     CASE WHEN DATEDIFF(DD, date_Investigaton, getdate()) >= priority 
      THEN 'YES' 
      ELSE 'NO' 
     END AS Overtasked 
FROM <YourTable> 
WHERE <YourWhereIfAny> 
+0

バックティックはMySQLを意味すると仮定します。 – jarlh

0

date_InvestigationDATE列の場合は、減算date_Investigation - CURRENT_DATE()はあなたが必要な日数を生成します。

それ以外の場合(たとえば、DATETIMEの場合)、両方のオペランドはconverted to floatであり、結果はまったく期待していないものです。このような場合は、DATEDIFF()機能を使用してください。引数をDATE(時間部分を無視する)と解釈し、2つの日付間の整数の日数を返します。そうでない場合は(

SELECT 
    `defect_Id`, 
    IF (DATEDIFF(`date_Investigaton`, CURRENT_DATE()) >= `priority`, 'YES', 'NO') 
     AS `Overtasked` 
FROM [...your table name here...] 
WHERE [...conditions...] 

が返される行数を制限するために、どこからデータを取得するために、テーブルといくつかの条件の名前を角括弧([...])で、部品を交換します。

あなたのクエリは次のようにする必要がありますおそらく、あなたが望むものではないテーブル全体を取得します)。

Btw、CURRENT_DATE()もまた関数である。バッククォート(``)で記述すると、MySQLはこの名前のカラムを見つけようとしますが、失敗するでしょう。

this questionの回答をお読みください。 MySQLで(そして部分的にPHPで)バックティック、シングルクォート、ダブルクォートをいつ使用するかを説明します。