Sql 将空datetime转换为空

Sql 将空datetime转换为空,sql,sql-server,datetime,null,Sql,Sql Server,Datetime,Null,我想将datetime字段转换为varchar,以便在日期为空时显示空白或消息。 这就是我到目前为止所做的: select isnull(us.Date,0) as USDate, isnull(au.Date,0) as AUDate from ustable us left join autable au on us.column=au.column 现在,这显示: USDATE 2014-10-24 10:29:07.450 1900-01-01 00:00:00.000 我希望能够

我想将datetime字段转换为varchar,以便在日期为空时显示空白或消息。 这就是我到目前为止所做的:

select
isnull(us.Date,0) as USDate,
isnull(au.Date,0) as AUDate
from ustable us
left join autable au
on us.column=au.column
现在,这显示:

USDATE 
2014-10-24 10:29:07.450
1900-01-01 00:00:00.000

我希望能够制作“1900-01-01 00:00:00.000”varchar,以便我可以编写消息或显示真正的空白。

您可以像这样使用
Case
CONVERT
-

SELECT
CASE WHEN us.Date IS NULL THEN '' ELSE CONVERT(VARCHAR(30), us.Date, 121) END AS USDate,
CASE WHEN au.Date IS NULL THEN '' ELSE CONVERT(VARCHAR(30), au.Date, 121) END AS AUDate
FROM ustable us
left join autable au
on us.column=au.column

试试这样的

select
CONVERT(varchar(50), isnull(us.Date,0)) as USDate,
CONVERT(varchar(50), isnull(au.Date,0)) as AUDate
from ustable us
left join autable au
on us.column=au.column
您需要根据日期格式更改varchar的大小。此外,CONVERT接受第三个参数,该参数允许您更改字符串的格式。

要在SQL中执行此操作,请执行以下操作:

更改您的
SELECT
语句,以便在
时加入
然后
子句:

CASE us.Date 
  WHEN '1900-01-01 00:00:00.000' THEN ''
  WHEN NULL THEN ''
  ELSE us.Date
END as USDate,
CASE au.Date 
  WHEN '1900-01-01 00:00:00.000' THEN ''
  WHEN NULL THEN ''
  ELSE au.Date
END as AUDate

如果您有前端代码,则只需在前端实现功能,而无需更改SQL代码。

给定如下定义的列:

date_of_birth datetime null
你可以简单地说

select date_of_birth = coalesce( convert(varchar(32),date_of_birth) , '' )
from some_table_with_a_nullable_datetime_column

我找到的最简单的代码行是下面的代码

ISNULL(CONVERT(VARCHAR(30),us.Date,121),'') as USDate,
ISNULL(CONVERT(VARCHAR(30),au.Date,121),'') as AUDate,
我已经对此进行了测试并验证了它的有效性。

您可以使用NVL()函数


可以使用NVL函数转换计算结果的表达式 将空值设置为指定的值。NVL函数接受两个 arguments:第一个参数采用要创建的表达式的名称 评价的;第二个参数指定函数的值 当第一个参数的计算结果为NULL时返回。如果第一个 参数的计算结果不为NULL,函数返回 第一个论点

例如:

select
nvl(us.Date,'') as USDate,
nvl(au.Date,'') as AUDate
from ustable us
left join autable au
on us.column=au.column
或者将您想要的任何内容作为默认设置:

select
nvl(us.Date,'this was a NULL') as USDate,
nvl(au.Date,'this was a NULL') as AUDate
from ustable us
left join autable au
on us.column=au.column

尝试一下,它会显示列值应该为空。

我建议在前端而不是在sql中进行这种格式设置。让您的应用程序处理显示。这将实际输出
1900-01-01 00:00:00.000
。第二个
案例是否缺少
结尾
?这将在我的系统上返回
1900年1月1日12:00AM
,而不是
”isnull(美国日期,0)”应返回整数零。然后Convert语句应将其转换为字符串“0”。如果用空字符串替换IsNull语句的第二个参数,会得到什么结果?如果
us.Date
是Date/datetime等,则不会。你试过了吗?抱歉。我运行“选择CONVERT(VARCHAR(50),ISNULL(Null,0));”并得到了我的答案。当null来自datetime列或变量而不是硬编码的值时,这实际上是不同的。两个问题:(1)当表中的日期为null时,他们想要一个空字符串,而不是1900-01-01(2)即使该日期实际有一个有效值(1900-01-01除外),这也会返回null。您是正确的。我当时无法对此进行测试,因为我没有访问SQL的权限。OP表示这是SQL Server(MS)<代码>NVL
是Oracle的一项功能。
select null USDate, NUll AUDate
from ustable us
left join autable au on us.column=au.column