MoonPhase Function
Listing 1. Suppose that as part of analyzing sales data, you must calculate the percentage of the 29.5-day lunar cycle for a given date/time value. You could write the function in C# as shown here. [Microsoft.SqlServer.Server.SqlFunction(Name = "MoonPhase")] public static double MoonPhase(DateTime inDate) { // BACKGROUND: On average, the Moon goes through its phases in // 29.53 days (i.e., New Moon to New Moon). I stress // "average" because orbital mechanics makes this // shorter for some months, and longer for others. // May 26, 1979 is a good Epoch because the New Moon began at // exactly 12:00 AM UTC // Subtract the Epoch from the DateTime passed in (assumed UTC) TimeSpan sinceEpoch = inDate - new DateTime(1979, 5, 26, 0, 0, 0, 0, DateTimeKind.Utc); // Calculate and return the percentage of the current phase return (sinceEpoch.TotalDays % 29.53D) / 29.53D; } |