Studiu de caz: UDF-uri

Scrierea funcțiilor și a procedurilor stocate în SQL Server

Meghan Kwartler

IT Consultant

Problema de afaceri: curse taxi

  1. Firmă de private equity din UE care caută oportunități de investiții în transportul din SUA.
  2. Care este tariful mediu pe distanță, numărul de curse și durata totală pentru fiecare district din NYC, pe zi a săptămânii?

Fotografie taxi galben

Scrierea funcțiilor și a procedurilor stocate în SQL Server

Problema de afaceri: curse taxi

  1. Firmă de private equity din UE care caută oportunități de investiții în transportul din SUA.
  2. Care este tariful mediu pe distanță, numărul de curse și durata totală pentru fiecare district din NYC, pe zi a săptămânii?
  3. Care locații de îmbarcare din district ar trebui planificate pentru fiecare tură a șoferilor?

Fotografie taxi galben

Scrierea funcțiilor și a procedurilor stocate în SQL Server

UDF-uri de conversie

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
Scrierea funcțiilor și a procedurilor stocate în 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       |
+--------------+---------------+---------+---------+
Scrierea funcțiilor și a procedurilor stocate în SQL Server

Iterare

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;
Scrierea funcțiilor și a procedurilor stocate în SQL Server

Ce este cu turele?

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;
Scrierea funcțiilor și a procedurilor stocate în SQL Server

Testarea turelor

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     |
| ...  | ...   |
+------+-------|
Scrierea funcțiilor și a procedurilor stocate în SQL Server

Rândul dumneavoastră!

Scrierea funcțiilor și a procedurilor stocate în SQL Server

Preparing Video For Download...