sqlserver 使用總結

紫蕈發表於2024-08-02

1.日期或時間 加/減 天數/分鐘/秒
①DATEADD(YEAR/MONTH/DAY/HOUR/MINUTE/SECOND, #int數字, #date/datetime型別) 日期或時間 減 年/月/日/小時/分鐘/秒
②DATEDIFF(YEAR/MONTH/DAY/HOUR/MINUTE/SECOND, #date/datetime型別, #date/datetime型別) 兩個日期或時間型別相減,取年/月/日/小時/分鐘/秒

select DATEADD(day, -10, '2023-12-30 12:32:15') --2023-12-20 12:32:15.000
select DATEADD(day, 15, '2023-01-01') --2023-01-16 00:00:00.000
select DATEADD(hour, -10, '2023-12-30 12:32:15') --2023-12-30 02:32:15.000
select DATEADD(minute, -10, '2023-12-30 12:32:15') --2023-12-30 12:22:15.000
select DATEADD(second, -10, '2023-12-30 12:32:15') --2023-12-30 12:32:05.000


select DATEDIFF(DAY,'2023-04-03','2023-10-09')    --6
select DATEDIFF(MONTH ,'2023-02-03','2023-10-09')    --8
select DATEDIFF(YEAR ,'2020-02-03','2023-10-09')    --3
select DATEDIFF(HOUR ,'2023-10-09 10:15:07','2023-10-09 12:32:15')
select DATEDIFF(MINUTE ,'2023-10-09 12:15:07','2023-10-09 12:32:15')    --17
select DATEDIFF(SECOND ,'2023-10-09 12:32:07','2023-10-09 12:32:15')    --8

2.型別轉換

int轉字串 CAST(h.DateKey AS VARCHAR(10))
字串轉日期 CAST(#datestr AS DATE)
時間轉日期 CONVERT(date,#datatime時間型別)
date或datetime型別欄位可以透過直接取年/月/日/小時/分鐘/秒,如:YEAR/MONTH/DAY/HOUR/MINUTE/SECOND(#date/datetime型別)
DATENAME(weekday, #datetime型別) --展示日期對應的星期,返回值如:星期日

DATEPART(YEAR/MONTH/DAY/HOUR/MINUTE/SECOND, #datetime) 取時間型別的年/月/日/小時/分鐘/秒

select CAST(123456 AS VARCHAR(10));    --123456 型別:varchar(10)
select CAST('20240623' AS DATE);   --2024-06-23
select CONVERT(date,'2023-12-30 12:32:15');    --2023-12-30
select CONVERT(date,datetime型別);    --2023-12-30

--如下datatime為datetime型別
select
CONVERT(date, datatime),
DATEPART(year, datatime) year1,
DATEPART(month, datatime) month1,
DATEPART(day, datatime) day1,
DATEPART(hour, datatime) hour1,
DATEPART(minute, datatime) minute1,
DATEPART(second, datatime) second1
from Summary_ele_Ten;


如一個int型別的欄位,如20,220,131,要轉換成字串,要取年份,要轉換成date型別
select
20220131,
CAST(20220131 AS VARCHAR(10)),    --int轉字串
SUBSTRING(CAST(20220131 AS VARCHAR(10)), 0, 5) year1,    --字串取年
CAST(CAST(20220131 AS VARCHAR(10)) AS DATE) datekey1;    --字串轉日期

3.字串擷取
SUBSTRING(#str,start,length)


4.sqlserver沒有limit,可使用排序後取top(1)代替,

SQL Server中的TOP關鍵字用於限制查詢結果的行數。‌可以與ORDER BY子句結合使用,‌以便根據特定的排序規則返回前N個記錄。‌
如下:

5.concat(#str1,#str2,...) 字串拼接
如:concat(DATEDIFF(MINUTE, e.BeginTime,e.EndTime),'min')

6.宣告變數和變數引用
如:
declare @page_begintime DateTime
declare @page_endtime DateTime
set @page_begintime = '2024-05-04 00:00:00.000'    -- 頁面選擇的開始時間
set @page_endtime = '2024-06-17 23:59:59.998'    -- 頁面選擇的截止時間

-- 引用:
@page_begintime

7.時間格式化
FORMAT(#datetime, 'yyyy-MM-dd HH:mm:ss')

8.ISNULL(#欄位, 0) 如果欄位值為null,就設定成0,用於求和時的處理,因null+數值為null,如 sum(ISNULL(#欄位, 0))