如果date为Null,则如何输出为'NA',如果不为null,则输出日期时间格式?

时间:2017-05-03 09:28:46

标签: sql-server sql-server-2008-r2

我在这里有一个查询,

SELECT MIN(DATE)  FROM tableA

此处,如果日期值为Null,则应显示“NA”,

SELECT isnull(convert(varchar(10),MIN(DATE)),'NA')  FROM tableA

适用于MIN(DATE)的情况为空,但如果它不为null,则输出的格式不同,如May 11等,我该怎样解决这个问题?

2 个答案:

答案 0 :(得分:2)

SQL Server不存储日期/时间值的格式,它们存储为整数。

CONVERT()有第三个参数,用于定义日期类型输出的格式(内置)。默认值取决于您的配置和服务器设置

BOL中的更多信息:https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql

SELECT COALESCE(CONVERT(VARCHAR(10), MIN([date]), 120), 'NA') FROM tableA

或者,您可以在较新版本(2012+)中使用FORMAT来指定自定义格式。

再次,BOL中的更多信息:https://docs.microsoft.com/en-us/sql/t-sql/functions/format-transact-sql

SELECT COALESCE(FORMAT(MIN([date]), 'yyyy-MM-dd'), 'NA') FROM tableA

答案 1 :(得分:1)

Declare @day TABLE ([DATE] DATE)
INSERT INTO @day
SELECT '2017-02-04' Union all
SELECT '2017-05-05' Union all
SELECT  NULL    Union all
SELECT '2017-06-06' Union all
SELECT '2017-08-08' 
SELECT [DATE],ISNULL(NULLIF(CONVERT(varchar(10),MIN([DATE])),'1900-01-01'),'NA') as ConvertedColumn from @day
GROUP by [DATE]

OutPut显示日期列是否包含最小日期值为Null,然后显示AS'NA'并显示表中的下一个最小日期值

DATE        |ConvertedColumn
----------------------------
NULL        | NA
2017-02-04  |2017-02-04
2017-05-05  |2017-05-05
2017-06-06  |2017-06-06
2017-08-08  |2017-08-08