我知道在SQL Server中,零长度字符串('')与null
不同,但有没有办法确定它是否为零长度字符串或null ?
业务要求是:
如果用户输入索引字,请说IN_DATE
,然后匹配IN_DATE
;
如果用户没有为IN_DATE
输入任何内容,则匹配所有内容
我使用以下陈述进行测试。
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
任何人都可以告诉我这些查询的内部逻辑是什么?非常感谢。
答案 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)