Labels

Tuesday, July 30, 2013

Calculate Age from Date of Birth in SQL

Below SQL function is used to get age of a person from Date of Birth.
CREATE FUNCTION [dbo].[fn_GetAge] (@in_DOB AS DATETIME)
RETURNS INT
AS
BEGIN
 DECLARE @age INT
 DECLARE @now DATETIME = (
   SELECT GETDATE()
   )

 --PRINT @NOW              
 IF cast(datepart(m, @now) AS INT) > cast(datepart(m, @in_DOB) AS INT)
  SET @age = cast(datediff(yyyy, @in_DOB, @now) AS INT)
 ELSE IF cast(datepart(m, @now) AS INT) = cast(datepart(m, @in_DOB) AS INT)
  IF datepart(d, @now) >= datepart(d, @in_DOB)
   SET @age = cast(datediff(yyyy, @in_DOB, @now) AS INT)
  ELSE
   SET @age = cast(datediff(yyyy, @in_DOB, @now) AS INT) - 1
 ELSE
  SET @age = cast(datediff(yyyy, @in_DOB, @now) AS INT) - 1

 RETURN @age
END
Executing below SQL query you will get following output..
select dbo.fn_GetAge('1987-02-28'), GETDATE()
select dbo.fn_GetAge('1987-03-01'), GETDATE()
select dbo.fn_GetAge('1987-03-02'), GETDATE()
Get Age

Wednesday, July 24, 2013

SQL UDF to Remove Special Characters from Text



CREATE FUNCTION [dbo].[fn_RemoveSpecialCharacters] (@name VARCHAR(max))
RETURNS NVARCHAR(max)
AS
BEGIN
       DECLARE @str VARCHAR(MAx)

       SET @str = @name

       WHILE PATINDEX('%[ !@#$%^&*()<>?:"{},./;=+|\_]%', @str) > 0
              SET @str = REPLACE(@str, SUBSTRING(@str, PATINDEX('%[ !@#$%^&*()<>?:"{},./;=+|\_]%', @str), 1), '')

       RETURN replace(@str, '-', '')
END


SQL UDF to get float value from Text


CREATE FUNCTION [dbo].[fn_GetFloatFromText] (@name VARCHAR(max))
RETURNS NVARCHAR(max)
AS
BEGIN
       DECLARE @str VARCHAR(MAx)

       SET @str = @name

       WHILE PATINDEX('%[^0-9.]%', @str) > 0
              SET @str = REPLACE(@str, SUBSTRING(@str, PATINDEX('%[^0-9.]%', @str), 1), '')

       RETURN replace(@str, '-', '')
END

SQL UDF to get all integers from Text


CREATE FUNCTION [dbo].[fn_GetIntFromText] (@name VARCHAR(max))
RETURNS NVARCHAR(max)
AS
BEGIN
       DECLARE @str VARCHAR(MAx)

       SET @str = @name

       WHILE PATINDEX('%[^0-9]%', @str) > 0
              SET @str = REPLACE(@str, SUBSTRING(@str, PATINDEX('%[^0-9]%', @str), 1), '')

       RETURN replace(@str, '-', '')
END