Nghiên cứu tình huống UDF

Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

Meghan Kwartler

IT Consultant

Bài toán kinh doanh taxi

  1. Quỹ PE EU tìm cơ hội đầu tư vào Vận tải Mỹ.
  2. Trung bình tiền cước theo quãng đường, số chuyến và tổng thời gian chuyến cho từng quận NYC theo từng ngày trong tuần là bao nhiêu?

ảnh taxi vàng.jpg

Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

Bài toán kinh doanh taxi

  1. Quỹ PE EU tìm cơ hội đầu tư vào Vận tải Mỹ.
  2. Trung bình tiền cước theo quãng đường, số chuyến và tổng thời gian chuyến cho từng quận NYC theo từng ngày trong tuần là bao nhiêu?
  3. Nên lên lịch các điểm đón nào trong quận cho từng ca lái xe?

ảnh taxi vàng.jpg

Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

UDF chuyển đổi

CREATE FUNCTION dbo.ConvertMileToMeter (@miles numeric)
RETURNS numeric
AS
BEGIN
RETURN (SELECT @miles * 1609.34)
END
CREATE FUNCTION dbo.ConvertCurrency (@Currency numeric, @ExchangeRate numeric)
RETURNS numeric
AS
BEGIN
RETURN (SELECT @ExchangeRate * @Currency)
END
Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server
SELECT TripDistance as 'MileDistance', 
dbo.ConvertMileToMeter (TripDistance) as 'MeterDistance', 
FareAmount as 'FareUSD', 
dbo.ConvertCurrency (FareAmount, '.78') as 'FareGBP' 
FROM dbo.YellowTripData
+--------------+---------------+---------+---------+
| MileDistance | MeterDistance | FareUSD | FareGBP |
|--------------+---------------+---------+---------+
|  1.10        | 1609          |  6      | 6       |
|  0.02        | 0             | 52      | 52      |
|  0.50        | 1609          |  4      | 4       |
|  7.75        | 12875         | 22      | 22      |
|  0.80        | 1609          |  6      | 6       |
|  0.90        | 1609          |  7      | 7       |
|  1.76        | 3219          |  7      | 7       |
|  8.47        | 12875         | 24      | 24      |
|  2.40        | 3219          | 10.50   | 11      |
| 12.60        | 20921         | 60      | 60      |
|  0.90        | 1609          |  7      | 7       |
+--------------+---------------+---------+---------+
Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

Lặp qua

ALTER FUNCTION dbo.ConvertMileToMeter (
  @miles numeric (18, 2)
) RETURNS numeric (18, 2) as BEGIN RETURN (
  SELECT @miles * 1609.34
) END;
ALTER FUNCTION dbo.ConvertCurrency (
  @Currency numeric (18, 2), 
  @ExchangeRate numeric(18, 2)
) RETURNS numeric (18, 2) AS BEGIN RETURN (
  SELECT @ExchangeRate * @Currency
) END;
Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

Ca làm thì sao?

CREATE FUNCTION dbo.GetShift (@Hour int)
RETURNS int
AS
BEGIN
RETURN (CASE 
    WHEN @Hour >= 0 AND @Hour < 9 THEN 1
    WHEN @Hour >= 9 AND @Hour < 18 THEN 2
    WHEN @Hour >= 18 AND @Hour < 24 THEN 3
END)
END;
Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

Kiểm tra ca làm

SELECT 
  DATENAME(hour, PickupDate) AS 'Hour', 
  dbo.GetShift (
    DATENAME(hour, PickupDate)
  ) AS 'Shift' 
FROM YellowTripData 
GROUP BY DATENAME(hour, PickupDate) 
ORDER BY 
  dbo.GetShift (
    DATENAME(hour, PickupDate)
  )
+------+-------+
| Hour | Shift |
|------+-------|
|  3   | 1     |
|  6   | 1     |
|  4   | 1     |
|  2   | 1     |
|  0   | 1     |
|  8   | 1     |
|  5   | 1     |
|  1   | 1     |
|  7   | 1     |
|  9   | 2     |
| 11   | 2     |
| 15   | 2     |
| 14   | 2     |
| ...  | ...   |
+------+-------|
Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

Đến lượt bạn!

Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server

Preparing Video For Download...