我想要每個月固定將六個月前的一個月資料匯到ad_trial_past的這個資料表裡,想請問SQL語法between...and這邊應該怎麼改呢?
例:假如現在是4月,往前推6個月就是9/1~9/30的資料要匯到ad_trial_past資料表。
麻煩大家了!
$sql = "INSERT INTO ad_trial_past SELECT * FROM ad_trial WHERE ad_date BETWEEN '2018-06-01' AND '2018-06-30' AND adelete='N' AND appr='Y'";
$sql = "
INSERT INTO ad_trial_past
SELECT * FROM ad_trial
WHERE
DATEPART(yyyy,ad_date) = DATEPART(yyyy,DATEADD(MONTH,-6,GETDATE())) --年份比對
AND DATEPART(mm,ad_date) = DATEPART(mm,DATEADD(MONTH,-6,GETDATE())) --月份比對
AND adelete='N' AND appr='Y' ";
DATEADD(MONTH,-6,GETDATE())
= 半年前
DATEPART
針對日期欄位擷取年份月份
我是覺得擷取到月份處理比較好,如果一定要比對到日的話可以參考這個
-- 回推月數
set @No=6;
-- 起始日期
set @MyDate='2021-04-10';
select date_sub(date_sub(date_format(@MyDate,'%y-%m-%d'),interval extract(
day from @MyDate)-1 day),interval @No month) as month_first,
date_sub(date_sub(date_format(@MyDate,'%y-%m-%d'),interval extract(
day from @MyDate) day),interval @No-1 month) as month_last
往前的第6個月 dateadd(m,-6,getdate())
$sql = "INSERT INTO ad_trial_past SELECT * FROM ad_trial
WHERE convert(varchar(10),ad_date,112) like
left(convert(varchar(10),dateadd(m,-6,getdate()),112),6) +'%'
AND adelete='N' AND appr='Y'";
declare @d as datetime set @d = datefromparts(2020,10,20) select @d 你要看的那一天 -- 設定你要抓的那一天,比如2020/10/20 set @d = dateadd(month,-6,@d) --減6個月 select datefromparts(year(@d),month(@d),1) 半年前的第一天 -- 用datefromparts串,最後一個參數就是1,沒有懸念 -- 六個月前的最後一天,就是六個月前的第一天加1個月再減1天 set @d = dateadd(month,1,@d) -- 絕不會出現大月小月閏年非閏年的麻煩 select dateadd(day,-1,datefromparts(year(@d),month(@d),1)) 半年前的最後一天 GO
db<>fiddle here