[asp.net]转换失败时选择日期与使用转换案

标签: Asp.net SQLServer
发布时间: 2017/3/26 2:20:52
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我创建了一个 asp.net 页 (2.0),我就有一个可怕的时间与查询。

我的工作和日期,使用转换 (datetime,ExpirationDate) 来格式化我的日期,它们存储在数据库中为 varchar 格式 'yyyymmdd'。

一切都正常工作,直到我试着用 「 不适用 」,而此时我得到替换空值︰

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 专业,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

解决方法 1:

问题是,你想说,有时候你想 datetime 和其他你想要的时间 varchar 。 但你做不到。 实际上发生的是,它认为 datetime 价值第一,只是假定它应转换 varchar 的失败。 你也应该只是转换它,如果它是 null 你会得到 null datetime 。 或把它作为 varcharnull 检查

CONVERT(datetime, expirationdate) as ExpirationDate

ISNULL(expirationdate, 'n/a') as ExpirationDate

它真的取决于你希望如何消耗上,此值将工作最好。 我会推荐你使用转换,然后填充的值到 DateTime? 然后做 UI 代码中的格式。

string toDisplay = ExpirationDate == null ? "n/a" : ExpirationDate.ToString("yyyy-MMM-dd")

当然,这会是最好,如果你可以改变数据库以正确存储的值作为 datetime 而不是 varchar

赞助商