iT邦幫忙

0

SQL取得六個月前的第一天和最後一天的時間寫法

sql
  • 分享至 

  • xImage

我想要每個月固定將六個月前的一個月資料匯到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'";
看更多先前的討論...收起先前的討論...
archer9080 iT邦研究生 3 級 ‧ 2021-03-15 16:06:49 檢舉
DATEADD & DATEDIFF
試試
to_char(ad_date,'YYYY/MM') =
to_char(add_months( SYSDATE, -6 ),'YYYY/MM')
石頭 iT邦高手 1 級 ‧ 2021-03-15 16:19:49 檢舉
What's your DBMS?
SQLChat iT邦新手 5 級 ‧ 2021-03-15 21:51:53 檢舉
我喜歡石頭的問題. 不同的資料庫有不同的語法.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
微笑
iT邦研究生 5 級 ‧ 2021-03-15 16:16:52
$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 針對日期欄位擷取年份月份

我是覺得擷取到月份處理比較好,如果一定要比對到日的話可以參考這個

0
rogeryao
iT邦超人 7 級 ‧ 2021-03-15 17:35:28
-- 回推月數
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

Demo

0
allenlwh
iT邦高手 1 級 ‧ 2021-03-15 18:05:13
  1. 往前的第6個月 dateadd(m,-6,getdate())

  2. $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'";

1
japhenchen
iT邦超人 1 級 ‧ 2021-03-16 07:57:43
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

https://ithelp.ithome.com.tw/upload/images/20210316/201179548WqN9yYJXR.jpg

我要發表回答

立即登入回答