SQL 查询 - 如果日期早于 30 天,则将 NULL 替换为文本
SQL Query - Replace NULL with Text IF Date Older than 30 days
版本:SQL Server 2008 R2
我目前收到如下输出:
f_ID f_lastonline f_reasonforoffline
===============================================================
1 01/01/2015 12:00:00 ISP Down
2 02/02/2015 12:00:00 Hardware Failure
3 03/03/2015 12:00:00 NULL
4 04/23/2015 12:00:00 NULL
默认情况下,我可以使用
将 NULL 值替换为我选择的字符串
SELECT
f_ID,
f_lastonline,
ISNULL(f_reasonforoffline, 'Likely Turned Off') AS f_reasonforoffline
此查询语法将 return 输出如下所示:
f_ID f_lastonline f_reasonforoffline
===============================================================
1 01/01/2015 12:00:00 ISP Down
2 02/02/2015 12:00:00 Hardware Failure
3 03/03/2015 12:00:00 Likely Turned Off
4 04/23/2015 12:00:00 Likely Turned Off
但是,如果 'f_lastonline' 日期早于 30 天,我只想将文本更改为 'Likely Turned Off'。
用代码来解释(但请注意,这在语法上是不正确的),这就是我希望完成的:
ISNULL(IF f_lastonline <= DATEADD(dd,DATEDIFF(dd,0,GETDATE()),-30) THEN f_reasonforoffline, 'Likely Turned Off' ELSE f_reasonforoffline, '') AS f_reasonforoffline,
然后,最终所需的输出将是以下内容,其中 2015 年 3 月 3 日(超过 30 天)的 NULL 'f_reasonforoffline' 将更改为 'Likely Turned Off' 并且 NULL 'f_reasonforoffline' 2015 年 4 月 23 日的值将简单地更改为“”(不为空,只是空白)。
f_ID f_lastonline f_reasonforoffline
===============================================================
1 01/01/2015 12:00:00 ISP Down
2 02/02/2015 12:00:00 Hardware Failure
3 03/03/2015 12:00:00 Likely Turned Off
4 04/23/2015 12:00:00
*注意:这样做的原因是我不必再向查看报告的人解释 "NULL" 的含义。
提前致谢,
蜜蜂
SELECT
f_ID,
f_lastonline,
CASE
WHEN f_lastonline < DATEADD(DD,-30,GETDATE())
THEN ISNULL(f_reasonforoffline, 'Likely Turned Off')
ELSE f_reasonforoffline
END AS f_reasonforoffline
版本:SQL Server 2008 R2
我目前收到如下输出:
f_ID f_lastonline f_reasonforoffline
===============================================================
1 01/01/2015 12:00:00 ISP Down
2 02/02/2015 12:00:00 Hardware Failure
3 03/03/2015 12:00:00 NULL
4 04/23/2015 12:00:00 NULL
默认情况下,我可以使用
将 NULL 值替换为我选择的字符串SELECT
f_ID,
f_lastonline,
ISNULL(f_reasonforoffline, 'Likely Turned Off') AS f_reasonforoffline
此查询语法将 return 输出如下所示:
f_ID f_lastonline f_reasonforoffline
===============================================================
1 01/01/2015 12:00:00 ISP Down
2 02/02/2015 12:00:00 Hardware Failure
3 03/03/2015 12:00:00 Likely Turned Off
4 04/23/2015 12:00:00 Likely Turned Off
但是,如果 'f_lastonline' 日期早于 30 天,我只想将文本更改为 'Likely Turned Off'。
用代码来解释(但请注意,这在语法上是不正确的),这就是我希望完成的:
ISNULL(IF f_lastonline <= DATEADD(dd,DATEDIFF(dd,0,GETDATE()),-30) THEN f_reasonforoffline, 'Likely Turned Off' ELSE f_reasonforoffline, '') AS f_reasonforoffline,
然后,最终所需的输出将是以下内容,其中 2015 年 3 月 3 日(超过 30 天)的 NULL 'f_reasonforoffline' 将更改为 'Likely Turned Off' 并且 NULL 'f_reasonforoffline' 2015 年 4 月 23 日的值将简单地更改为“”(不为空,只是空白)。
f_ID f_lastonline f_reasonforoffline
===============================================================
1 01/01/2015 12:00:00 ISP Down
2 02/02/2015 12:00:00 Hardware Failure
3 03/03/2015 12:00:00 Likely Turned Off
4 04/23/2015 12:00:00
*注意:这样做的原因是我不必再向查看报告的人解释 "NULL" 的含义。
提前致谢, 蜜蜂
SELECT
f_ID,
f_lastonline,
CASE
WHEN f_lastonline < DATEADD(DD,-30,GETDATE())
THEN ISNULL(f_reasonforoffline, 'Likely Turned Off')
ELSE f_reasonforoffline
END AS f_reasonforoffline