2016-04-07 33 views
-1

Projemin son aşamasındayım ve bir işin gecikmiş olup olmadığını bulmakta sorun yaşıyorum. Bunu önceliğe bağlarım, örneğin bir işin önceliği 1 ise, 1 gün içinde 4, 4 gün önceliği olmalıdır.DATEDIFF SQL Sorgu

Bir CASE ile geldim, ancak bu işe yaramıyor gibi görünüyor.

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

Çözüm

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

siz verin rehberlik takdir!

+2

Tag dbms kullanıldı. Bazı ANSI olmayan SQL orada var ... – jarlh

+0

Ayrıca, current_date() etrafında arka keneler kaldırın. – jarlh

+0

WAMP sunucusu ve PHP kullanarak myAdmin –

cevap

0

SQL lehçelerini tamamen karıştırıyorsunuz ve hatta sözdizimi hataları var. Size varsayarsak bunu deneyelim MS SQL Server bahsediyoruz: date_Investigation bir DATE sütundur

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

Back-ticks'in MySQL'i ima ettiğini farz ediyorum. – jarlh

0

ise, çıkarma date_Investigation - CURRENT_DATE() ihtiyacınız gün sayısını üretir.

Aksi takdirde (örneğin, bir DATETIME ise) her iki işlenen de converted to float şeklindedir ve sonuçta beklemediğiniz bir şeydir. Bu gibi durumlarda DATEDIFF() işlevini kullanın. Argümanlarını DATE (zaman bölümünü yok sayar) olarak yorumlar ve iki tarih arasındaki günlerin tamsayı sayısını döndürür. Aksi (

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

döndürülen satır sayısını sınırlamak için yerden veri almak için masa ve bazı koşullar adıyla köşeli parantez ([...]) içinde parçaları değiştirin:

Sorgunuzda gibi olmalıdır büyük olasılıkla, ne istediğinizi değil, tüm tabloyu alacaksınız.

Btw, CURRENT_DATE() da bir işlevdir. Eğer backquotes (``) yazıyorsanız, MySQL bu ada sahip bir sütun bulmaya çalışacaktır ve başarısız olacaktır.

this question için kabul edilen yanıtı okuyun. MySQL'de (ve kısmen de PHP'de) geri keneler, tek tırnaklar veya çift tırnakların ne zaman kullanılacağını açıklar.