1. 程式人生 > 資料庫 >SQL Server語句

SQL Server語句

變數定義

declare @DATE_1 datetime
set @DATE_1=GETDATE()-90
print @DATE_1

declare @DATE_1 datetime 宣告DATE_1變數,資料型別為datetime。
set @DATE_1=GETDATE()-90 為變數DATE_1賦值
print @DATE_1 列印DATE_1變數

內建函式datediff

查詢30天前的資料

select * from zxm10_telemeter.dbo.nms_telemeter_2_2002 where datediff(dd,report_time,getdate()-30)<=0;

說明:report_time為表zxm10_telemeter.dbo.nms_telemeter_2_2002中的時間欄位,dd為天,getdate()函式獲取當前日期減去30配合dd獲取30天前當天的日期,最後<=0獲取30天前的日期。

刪除3個月之前的資料

說明:對於大表,直接delete * 很耗費時間,不如先查出要刪除的資料,追加到一個新表,然後再truncate要刪除資料的表,再從新表把資料追加回來。

步驟1:將30天之前的資料追加到新表

select *  into  [new_telemeter].[dbo].[nms_telemeter_2_1035]
from [zxm10_telemeter].[dbo].[nms_telemeter_2_1035] 
where datediff(dd,report_time,getdate()-30) <= 0

注意:最後一定要是<=號。

步驟2:清空要刪除資料的表

truncate table [zxm10_telemeter].[dbo].[nms_telemeter_2_1036]

步驟3:追加資料到要刪除資料的表

insert into  [zxm10_telemeter].[dbo].[nms_telemeter_2_1036](device_id,mete_id,report_time,report_value,report_kind,write_time) ( select device_id,mete_id,report_time,report_value,report_kind,write_time 
from [new_telemeter].[dbo].[nms_telemeter_2_1036])

delete刪除

delete from [zxm10_telemeter].[dbo].[nms_telemeter_2_60
where datediff(dd,report_time,getdate()-30)= 0