在日期列上使用ISNULL或COALESCE函数

9

我有一个日期列,其中一些行的值为NULL。我想使用ISNULL或类似方法将这些值替换为“N/A”,但是当我尝试使用ISNULL时,由于两种不同的数据类型,我收到了错误提示。如果我尝试将我的日期列转换为VARCHAR以便能够使用ISNULL,那么我的日期列显示方式会变得失真。是否有任何方法可以解决这个问题?

ISNULL(DateSent, 'N/A')

分享你的数据表结构。 - Zaynul Abadin Tuhin
3
这是一个“表现层”问题。您希望在哪里看到“N/A”?在报告中吗? - Nick.McDermaid
不要在空值处使用“N/A”,并保留DateTime(或任何当前的日期类型)。如果必须这样做,请创建一个具有字符串化日期或“N/A”的视图。 - Patrick Artner
当您将日期转换为varchar时,可以选择样式。 - HoneyBadger
2个回答

11

我建议使用COALESCE()函数,因为它是标准的。然而,你的问题在于第一列是日期/时间类型的,这与字符串不兼容。

所以,你需要转换该值。你可以使用默认的格式:

COALESCE(CONVERT(VARCHAR(255), DateSent), 'N/A')

或者您可以添加一个转换参数:

COALESCE(CONVERT(VARCHAR(255), DateSent, 120), 'N/A')

或者你可以使用FORMAT()函数获得更高的灵活性。


3
COALESCE(CONVERT(VARCHAR(255), DateSent, 120), 'N/A') - 这个表达式完全符合我的需求!谢谢。 - Redraidas
这个问题和答案值得再获得一千个赞。这正是我一直在寻找的..太棒了! - thebdawk05
SQL Server中的ISNULL()和COALESCE()不是相同的。https://www.itprotoday.com/sql-server/coalesce-vs-isnull#:~:text=COALESCE比ISNULL具有一个明显的优势,即它符合ISO/ANSI SQL标准,而ISNULL是特定于T-SQL的。 - lit

2
最初的回答:

你可以尝试这个方法

Select ISNULL(Cast(DateSent as Varchar(20)), 'N/A')

以下是一个例子:

最初的回答
declare @DateSent date = getdate()
Select ISNULL(Cast(@DateSent as Varchar(20)), 'N/A')

For null values as below.

declare @DateSent1 date = NULL
Select ISNULL(Cast(@DateSent1 as Varchar(20)), 'N/A')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接