55

I know how to check if a parameter is null but i am not sure how to check if its empty ... I have these parameters and I want to check the previous parameters are empty or null and then set them like below

ALTER PROCEDURE [dbo].[GetSummary]
    @PreviousStartDate NVARCHAR(50) ,
    @PreviousEndDate NVARCHAR(50) ,
    @CurrentStartDate NVARCHAR(50) ,
    @CurrentEndDate NVARCHAR(50)
AS
  BEGIN
    IF(@PreviousStartDate IS NULL OR EMPTY)
        SET @PreviousStartdate = '01/01/2010'  for example..

I would appreciate the help.

bluish
  • 24,718
  • 26
  • 114
  • 174
user710502
  • 10,711
  • 27
  • 102
  • 161

12 Answers12

83

I sometimes use NULLIF like so...

IF NULLIF(@PreviousStartDate, '') IS NULL

There's probably no reason it's better than the way suggested by @Oded and @bluefeet, just stylistic preference.

@danihp's method is really cool but my tired old brain wouldn't go to COALESCE when I'm thinking is null or empty :-)

Mike G
  • 4,142
  • 9
  • 43
  • 64
Rex Miller
  • 2,666
  • 1
  • 19
  • 26
43

Here is the general pattern:

IF(@PreviousStartDate IS NULL OR @PreviousStartDate = '')

'' is an empty string in SQL Server.

Oded
  • 477,625
  • 97
  • 867
  • 998
11

I use coalesce:

IF ( COALESCE( @PreviousStartDate, '' ) = '' ) ...
dani herrera
  • 44,444
  • 7
  • 103
  • 165
6

you can use:

IF(@PreviousStartDate IS NULL OR @PreviousStartDate = '')
Taryn
  • 234,956
  • 54
  • 359
  • 399
  • 1
    @pavel thanks for pointing out the missin @ sign but you can see from the time stamp they were posted at the same time. – Taryn Dec 19 '12 at 23:38
4

What about combining coalesce and nullif?

SET @PreviousStartDate = coalesce(nullif(@PreviousStartDate, ''), '01/01/2010')
Pavel Hodek
  • 13,589
  • 3
  • 31
  • 37
3

Another option:

IF ISNULL(@PreviousStartDate, '') = '' ...

see a function based on this expression at http://weblogs.sqlteam.com/mladenp/archive/2007/06/13/60231.aspx

Erik K.
  • 974
  • 11
  • 13
3

To check if variable is null or empty use this:

IF LEN(ISNULL(@var, '')) = 0
Fábio Nascimento
  • 2,479
  • 1
  • 20
  • 26
  • For MSSQL15 and a DATETIME variable, it doesn´t work: --DECLARE @var DATETIME; --SET @var='' --SET @var=NULL --SET @var='2020-06-13 22:30:00.000' --IF LEN(ISNULL(@var, '')) = 0 --PRINT 'is null or empty'; -- #same result for all cases – danalif Jun 14 '20 at 00:52
2

If you want to use a parameter is Optional so use it.

CREATE PROCEDURE uspGetAddress @City nvarchar(30) = NULL, @AddressLine1 nvarchar(60) = NULL
    AS
    SELECT *
    FROM AdventureWorks.Person.Address
    WHERE City = ISNULL(@City,City)
    AND AddressLine1 LIKE '%' + ISNULL(@AddressLine1 ,AddressLine1) + '%'
    GO
1

To check if variable is null or empty use this

IF(@PreviousStartDate IS NULL OR @PreviousStartDate = '')
0

You can try this:-

IF NULLIF(ISNULL(@PreviousStartDate,''),'') IS NULL
SET @PreviousStartdate = '01/01/2010'
rchau
  • 515
  • 8
  • 31
TracyT
  • 1
0

If you want a "Null, empty or white space" check, you can avoid unnecessary string manipulation with LTRIM and RTRIM like this.

IF COALESCE(PATINDEX('%[^ ]%', @parameter), 0) > 0
    RAISERROR ...
Luke Girvin
  • 12,913
  • 8
  • 60
  • 81
Jodrell
  • 32,967
  • 4
  • 79
  • 120
0

I recommend checking for invalid dates too:

set @PreviousStartDate=case ISDATE(@PreviousStartDate) 
    when 1 then @PreviousStartDate 
        else '1/1/2010'
    end
John Dewey
  • 6,868
  • 3
  • 21
  • 26