2014-10-09 86 views
2

我想将日期时间字段转换为varchar,以便日期为空时显示空白或消息。 这是我到目前为止有:将NULL日期时间转换为空白

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所以我可以写一条消息或显示一个真正的空白。

+1

我会建议做这种类型的前端,而不是在SQL中的格式。让你的应用程序处理显示。 – 2014-10-09 15:30:35

回答

3

您可以使用CaseCONVERT这样的 -

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 
+0

这实际上会输出'1900-01-01 00:00:00.000'。 – 2014-10-09 15:42:44

+0

我已经更新了我的答案。现在检查.. – 2014-10-09 15:46:31

+0

第二个“CASE”是否缺少“END”? – 2014-10-09 21:03:21

-1

尝试这样的事情...

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还有第三个参数,可以让你改变字符串的格式。

+0

这会在我的系统上返回'Jan 1 1900 12:00 AM',而不是''''。 – 2014-10-09 18:37:49

+0

“isnull(us.Date,0)”应该返回一个整数零。然后,Convert语句应该将其转换为字符串“0”。如果用空字符串替换IsNull语句的第二个参数,会得到什么结果? – DeadZone 2014-10-09 19:17:11

+0

如果'us.Date'是日期/日期时间等,它不会。你是否尝试过***? – 2014-10-09 19:47:14

0

要做到这一点在SQL:

改变你SELECT声明掺入WHEN ...... THEN条款:

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代码。

+0

两个问题:(1)当表中的日期为NULL时,它们需要一个空字符串,而不是1900-01-01(2)即使日期实际上有一个有效值(1900-01-01除外),它也会返回NULL )。 – 2014-10-09 18:39:36

+0

你是对的。我当时无法测试,因为我没有访问SQL。 – 2014-10-09 21:02:31

0

鉴于这样定义的列:

date_of_birth datetime null 

你可以简单地说

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

我已经找到了你要完成的是如下的代码最简单的线条。

ISNULL(CONVERT(VARCHAR(30),us.Date,121),'') as USDate, 
ISNULL(CONVERT(VARCHAR(30),au.Date,121),'') as AUDate, 

我测试了这个并验证了它的工作原理。

相关问题