2016-12-31 36 views
3

我想要一個SQL查詢來選擇兩個月的日期。SQL查詢選擇每月的兩天之間

可以說在下個月的15日和15日之間。

這是會計目的

我知道有具有不同天增加30天或31天內開始日期每個月不會在二月尤其是工作,我的記賬運行是從本月15日到下個月的第15天。是

我選定日期當前查詢如下

SELECT * FROM lbs_trace_etrack WHERE lbs_date >= '" . $dates . "' 
AND lbs_date <= '" . $datee . "' AND lbs_client='$slcustom1' ORDER BY lbs_date DESC, lbs_time DESC 

lbs_date開始應該是每個月和lbs_date結束的15日應該是下個月

15日通過定義的日期如下作品,但它是從11月的日期到現在給我的,我希望從本月15日開始看到我們已經過去了本月的第15天

$first = date('Y-m-15', strtotime("$last -1 month")); 
$last = date('Y-m-t'); 

和查詢

SELECT * FROM lbs_trace_etrack WHERE lbs_date >= '" .  
$first . "' 
AND lbs_date <= '" . $last . "' ORDER BY lbs_date DESC 

基本上是以我們通過本月15日,我需要它來顯示我從目前的15日不前一個月15日到現在

+0

當前查詢有什麼問題? – jophab

+0

當前查詢使用表單中的預定義日期,我想使用靜態日期,因此我不必使用預定義的變量 –

+0

這不是很清楚。如果你想動態選擇日期,你可以把它寫成SELECT DATE_FORMAT((NOW()+ INTERVAL 1 MONTH),'%Y-%m-15'); – user3606329

回答

2

如果你真的想要什麼,我知道你想,

SELECT l.* 
    FROM lbs_trace_etrack l 
    JOIN (SELECT s.cd, CASE 
      WHEN s.cd >= DATE(DATE_FORMAT(s.cd,'%Y-%m-15')) 
      THEN DATE(DATE_FORMAT(s.cd,'%Y-%m-15')) 
      ELSE DATE_SUB(DATE(DATE_FORMAT(s.cd,'%Y-%m-15')), INTERVAL 1 MONTH) 
       AS start_date 
      FROM (SELECT CURDATE() cd) s) d 
     ON (TRUE) 
    WHERE l.lbs_date >= d.start_date 
     AND l.lbs_date < d.cd 
     AND l.lbs_client = '$slcustom1' 
ORDER BY l.lbs_date DESC, l.lbs_time DESC; 

請注意,您仍然有PHP變量$slcustom1那裏。 加入子選擇的動機是需要僅調用CURDATE()一次,以避免在兩次後續調用之間日期可能發生變化的罕見情況。 請檢查比較<,>=等是你想要的。

編輯: 我已經將start_date的計算移動到了連接表中。即使以這種方式,我必須撥打DATE(DATE_FORMAT())三次,如果我們處於該月的上半月,那麼最好爲每一行計算DATE_SUB

0

難道你能使用mysql目前每天使用()函數滿足您的要求。

例:

SELECT day("2016.12.15"); 
     result: 
     15 

喜歡聰明人,你可以使用此功能來檢查其是否 「15」

選擇一天(的currentdate())

+0

是他的問題的唯一解決方案? –

0

使用DAY()功能得到具體日期

select * from My_Table where day(str_to_date(`Date`,'%d-%m-%Y')) = 1 or day(str_to_date(`Date`,'%d-%m-%Y')) = 15; 
-2
select group_concat(year(now()),"-",month(now()),"-",15)