課程導論

在 SQL Server 中撰寫函式與預存程序

Meghan Kwartler

IT Consultant

課程目標

  • 使用 SQL 日期函式進行時間型 EDA(探索式資料分析)
  • 建立、更新並執行使用者自訂函式
  • 建立、更新並執行預存程序
  • 先修課程
    • SQL Server 入門
    • SQL 的資料連接
    • SQL Server 中級
在 SQL Server 中撰寫函式與預存程序

時間型 EDA

  • 交易型資料集
    • CapitalBikeShare
    • YellowTripTaxi
  • 探索式資料分析(EDA)流程
    • 反覆進行
    • 沒有固定題目清單
    • 保持好奇!
    • 可減少重工

EDA 視覺化

在 SQL Server 中撰寫函式與預存程序

用於 EDA 的 SQL 函式

-- CONVERT 語法:  
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )  
-- 依 data_type 回傳對應的 expression
-- DATEPART 語法
DATEPART ( datepart , date ) 
-- 回傳 int
-- DATENAME 語法
DATENAME ( datepart , date ) 
-- 回傳 nvarchar
-- DATEDIFF 語法
DATEDIFF ( datepart , startdate , enddate ) 
-- 回傳 int;不能使用 datepart 的 weekday 值
-- datepart 可用值:year、quarter、month、dayofyear、day、week、weekday、hour、
-- minute、second、microsecond、nanosecond
在 SQL Server 中撰寫函式與預存程序
-- CONVERT
SELECT 
  TOP 1 PickupDate, 
  CONVERT (DATE, PickupDate) AS DateOnly 
FROM YellowTripData
+-----------------------------+------------+
| PickupDate                  | DateOnly   |
|-----------------------------+------------|
| 2017-01-09 11:52:13.0000000 | 2017-01-09 |
+-----------------------------+------------+
在 SQL Server 中撰寫函式與預存程序
-- DATEPART
SELECT 
  TOP 3 COUNT(ID) AS NumberofRides, 
  DATEPART(HOUR, PickupDate) AS Hour 
FROM YellowTripData 
GROUP BY DATEPART(HOUR, PickupDate) 
ORDER BY COUNT(ID) DESC
+----------------------+
| NumberOfRides | Hour |
|----------------------+
| 616281        | 18   |
| 616281        | 19   |
| 540629        | 17   |
+---------------+------+
在 SQL Server 中撰寫函式與預存程序
--DATENAME
SELECT 
  TOP 3 ROUND(
    SUM(FareAmount), 
    0
  ) as TotalFareAmt, 
  DATENAME(WEEKDAY, PickupDate) AS DayofWeek 
FROM YellowTripData 
GROUP BY DATENAME (WEEKDAY, PickupDate) 
ORDER BY SUM(FareAmount) DESC;
+--------------------------+
| TotalFareAmt | DayofWeek |
|--------------------------+
| 19026645     | Sunday    |
| 18749482     | Tuesday   |
| 17213351     | Thursday  |
+--------------+-----------+
在 SQL Server 中撰寫函式與預存程序
--DATEDIFF
SELECT 
  AVG(
    DATEDIFF(SECOND, PickupDate, DropOffDate)/ 60
  ) AS AvgRideLengthInMin 
FROM YellowTripData 
WHERE DATENAME(WEEKDAY, PickupDate) = 'Sunday';
+--------------------+
| AvgRideLengthInMin |
|--------------------+
| 13                 |
+--------------------+
在 SQL Server 中撰寫函式與預存程序

一起來練習吧!

在 SQL Server 中撰寫函式與預存程序

Preparing Video For Download...