Solved

Inverse of a SQL Function

Posted on 2016-08-12
6
73 Views
Last Modified: 2016-08-12
I'm trying to find a way to create a formula to produce the inverse of this function. When writing the answer can you also write down what happens at each step? I tried to break down the formula to see what happens when we do (@StartQtr/10*10) since it looks like a redundant statement but I couldnt see the answer.

GO

/****** Object:  UserDefinedFunction [dbo].[FutureQtr_fn]    Script Date: 08/12/2016 11:52:56 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- This function takes a qtr (yyyyq), and adds the number of qtrs, and returns the future qtr
--e.g. FutureQtr (20154,7) returns 20173
CREATE FUNCTION [dbo].[FutureQtr_fn] (@StartQtr int,@AddlQtrs int)

Returns int
AS BEGIN
RETURN
      (@StartQtr/10*10)+ -- Current Year (yyyy)
            ((@StartQtr%(@StartQtr/10*10) +@AddlQtrs - 1)/4)*10 -- add'l years (n0)
            +(@StartQtr%(@StartQtr/10*10) +@AddlQtrs-1)%4  + 1 -- new qtr (n)
END

GO

Open in new window


Thanks
0
Comment
Question by:endurance
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
6 Comments
 
LVL 69

Expert Comment

by:Scott Pletcher
ID: 41754377
What do you mean by "inverse"?  Subtract qtrs?
0
 

Author Comment

by:endurance
ID: 41754380
Yes
0
 
LVL 69

Assisted Solution

by:Scott Pletcher
Scott Pletcher earned 500 total points
ID: 41754384
Personally I'd adjust the code's method so that you can just pass in a negative number of qtrs when you want to back up:

SELECT dbo.FutureQtr_fn(20154,7), dbo.FutureQtr_fn(20173,-7)

ALTER FUNCTION [dbo].[FutureQtr_fn]
(
    @StartQtr int,
    @AddlQtrs int
)
RETURNS int
AS
BEGIN
RETURN (
    SELECT (total_qtrs / 4 * 10) + (total_qtrs % 4 + 1)
    FROM (
        SELECT ((@StartQtr/10*4)+(@StartQtr%10)+(@AddlQtrs-1)) AS total_qtrs
    ) AS calc_new_qtr
)
END /*FUNCTION*/
0
Get free NFR key for Veeam Availability Suite 9.5

Veeam is happy to provide a free NFR license (1 year, 2 sockets) to all certified IT Pros. The license allows for the non-production use of Veeam Availability Suite v9.5 in your home lab, without any feature limitations. It works for both VMware and Hyper-V environments

 

Author Comment

by:endurance
ID: 41754442
that doesn't really work the way I need. I'll be creating a new function call it dbo.PastQtr_fn and when I write select dbo.PastQtr_fn(20154,7) I should get 20141.
0
 
LVL 69

Accepted Solution

by:
Scott Pletcher earned 500 total points
ID: 41754468
CREATE FUNCTION [dbo].[PastQtr_fn]
(
    @StartQtr int,
    @PastQtrs int
)
RETURNS int
AS
BEGIN
RETURN (
    SELECT (total_qtrs / 4 * 10) + (total_qtrs % 4 + 1)
    FROM (
        SELECT ((@StartQtr/10*4)+(@StartQtr%10)-(@PastQtrs+1)) AS total_qtrs
    ) AS calc_new_qtr
)
END /*FUNCTION*/
0
 

Author Closing Comment

by:endurance
ID: 41754476
Thank you so much.
0

Featured Post

Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Why is this different from all of the other step by step guides?  Because I make a living as a DBA and not as a writer and I lived through this experience. Defining the name: When I talk to people they say different names on this subject stuff l…
It is possible to export the data of a SQL Table in SSMS and generate INSERT statements. It's neatly tucked away in the generate scripts option of a database.
Using examples as well as descriptions, and references to Books Online, show the different Recovery Models available in SQL Server and explain, as well as show how full, differential and transaction log backups are performed
Viewers will learn how to use the UPDATE and DELETE statements to change or remove existing data from their tables. Make a table: Update a specific column given a specific row using the UPDATE statement: Remove a set of values using the DELETE s…

623 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question