Functions in SQL work just like functions in most programming languages. If you aren’t familiar with a function, you should know that you are already using them without even knowing it.
Consider this for example:
Select Count(*) From Table
COUNT() is a function. When you pass it rows from your query, it counts the rows and returns a value in the form of an integer. But COUNT() is a built in function, meaning it came as part of SQL Server, you did not have to create it.
SQL Server allows you the option of creating User Defined Functions, meaning functions you develop yourself. These are handy when you find yourself handling repeated tasks, such as date formatting or string manipulation. Instead of having to repeatedly code a complex command, you can just build a function once and then call on it whenever needed.
Let’s start with a basic example:
Here I created a function called ADD_UP that accepts 2 numbers and outputs the SUM of the two numbers ( yes I know this already available as the built in function SUM(), but I want to start nice and easy)
Lets start by discussing the syntax. The basic syntax for creating a function is as follows:
CREATE FUNCTION name (@var data-type) RETURNS data-type AS BEGIN RETURNS (some type of action) END
In my example we are naming the function ADD_UP and supplying two integer variables: @NUM1 and @NUM2
CREATE FUNCTION ADD_UP (@NUM1 INT, @NUM2 INT)
Then we define the data-type our function will return. In this case, since we are adding 2 integers, our function will return an INT
RETURNS INT
Next we wrap out function in
AS BEGIN ENDS
Finally, we perform an action
RETURNS (@NUM1+ @NUM2)
Finally, when you want to call the Function, just use it in a select statement.
(**Note, user defined functions require you to use the schema prefix. Since I just used the default dbo schema, this example uses dbo.ADD_UP)
select dbo.ADD_UP(2,3) as ADDED
and as you see, we get 5 as our answer.
Now, let’s try something different. Here we are going to work with a date function. In this example I built a function called MNTH that accepts one variable @DT – a date data-type and returns an Integer representing the month of the date passed to it.
Again, all I am really doing is duplicating the built-in function MONTH(), but I wanted to show different data-types
(** getdate() is a built-in function that returns the current date. I ran this SQL on 4/2/2018, so it returns 4 as a result)
Now finally here is an example of how you might use a function in real life. Let’s say you have lots of reports that call for your date to be represented in MM-YYYY format. Instead of having to repeatedly type a complex date formatting, you can build it into a User Defined Function and pass a regular date to the function.
If you are not familiar with cast(concat(month(@DT),’-‘,year(@DT))as varchar(8))) statement, I’ll break it down here:
Let’s go from the inside out:
concat is a string function meaning to concatenate or “string together” – so
concat(month(@DT),’-‘,year(@DT))
concat(4, ‘-‘, 2018)
4-2018
Cast allows us to convert the output of the concat statement into a string (varchar) data-type
cast(4-2018 as varchar(8)) = ‘4-2018’
Finally, if you want to find your functions after you create them, they are located under your database -> Programmability -> Functions
In this case, I only built Scalar-valued Functions, I’ll cover the other types in future lessons.