我正在创建一个asp.net页面(2.0),我的查询时间很糟糕。
我正在使用日期,使用convert(datetime,ExpirationDate)来格式化我的日期,这些日期存储在数据库中作为varchars,格式为'yyyymmdd'。
一切正常,直到我尝试用'n / a'替换空值,此时我得到:
Conversion failed when converting datetime from character string.
我试过
case when expirationdate is not null then convert(datetime, expirationdate)
else 'n/a' end as ExpirationDate
和
case when expirationdate is null then 'n/a'
else convert(datetime, expirationdate) end as ExpirationDate
我甚至尝试以编程方式更改单元格的值(在数据绑定gridview中),但没有运气。
我会采取任何解决方案。
我正在使用SQL Server 2005和VS Professional 2008。
我的完整查询是:
SELECT (firstname + ' ' + lastname) as userName,
EmployeeID, (SELECT Description FROM CMPRecords AS cm WHERE (CompentencyCode = co.CompetencyCode)) AS Competency,
convert(datetime, IssueDate) as IssueDate,
case when expirationdate is not null then CONVERT(datetime, expirationdate) else 'n/a' end as ExpirationDate FROM COMRecords AS co
WHERE (Username = @Username)
order by IssueDate Desc
答案 0 :(得分:1)
问题在于,您试图说有时您需要datetime
,有时您想要varchar
。但你不能这样做。事实上,它发生的是它首先看到datetime
值,并假设它应该转换失败的varchar
。您应该只是转换它,如果是null
,您将获得null
datetime
。或者使用varchar
支票
null
CONVERT(datetime, expirationdate) as ExpirationDate
或
ISNULL(expirationdate, 'n/a') as ExpirationDate
这实际上取决于你希望如何使用这个最有效的值。我建议您使用Convert,然后将值填充到DateTime?
,然后在UI代码中进行格式化。
string toDisplay = ExpirationDate == null ? "n/a" : ExpirationDate.ToString("yyyy-MMM-dd")
当然,最好是更改数据库以将值正确存储为datetime
而不是varchar
。