如何在SQL Server中将varchar零长度视为null?

时间:2014-10-24 11:29:25

标签: sql-server null

我知道在SQL Server中,零长度字符串('')与null不同,但有没有办法确定它是否为零长度字符串或null ?

业务要求是:

  1. 如果用户输入索引字,请说IN_DATE,然后匹配IN_DATE;

  2. 如果用户没有为IN_DATE输入任何内容,则匹配所有内容

  3. 我使用以下陈述进行测试。

    DECLARE @IN_DATE VARCHAR(8)
    SET @IN_DATE  = null
    --SET @IN_DATE  = ''
    SELECT 
        CONVERT(VARCHAR(8), ISNULL(@IN_DATE, GETDATE()), 112) AS OUT_DATE
    

    null和零长度VARCHAR都不会给我带来预期的结果。但我尝试了以下查询,它可以正常工作。

    SELECT 
        CONVERT(VARCHAR(8), ISNULL(NULL, GETDATE()), 112) AS OUT_DATE
    

    任何人都可以告诉我这些查询的内部逻辑是什么?非常感谢。

3 个答案:

答案 0 :(得分:2)

DECLARE @PASSED AS VARCHAR(50) = NULL

SELECT 
  CASE 
     WHEN ISDATE(@PASSED) = 0 THEN GETDATE() 
     ELSE CONVERT(DATE, @PASSED) 
  END AS DATE_OUT

1)如果传递使用NULL,则返回今天的日期

2)如果文本'13 / 13/2014'已通过但未通过有效日期,那么今天的日期将再次通过

3)如果通过有效日期'03 / 13/2014',则将其转换为有效日期类型

答案 1 :(得分:1)

DECLARE @IN_DATE VARCHAR(8) = ''
SELECT  
    (CASE @IN_DATE WHEN '' 
                  THEN CONVERT(VARCHAR(100), GETDATE(), 112) 
                  ELSE @IN_DATE END) AS OUT_DATE

答案 2 :(得分:1)

如果变量为NULL或为空,则默认为今天

SELECT ISNULL(NULLIF(@IN_DATE, ''), GETDATE())

对于(2)如果用户没有为IN_DATE输入任何内容,那么匹配每件事

WHERE
   (NULLIF(@IN_DATE, '') IS NULL OR SomeField = @IN_DATE)