我搜索了几个小时,发现了很多关于如何将日期时间字段转换为日期的信息。所有这些都在我的SQL窗口中运行良好。但是,我尝试在视图中使用的那一刻它崩溃了。
版本:SQL Server v17.0
例:
表中的字段是:InvoiceDate(datetime,null)
数据是:2016-11-15 00:00:00.000
我的SQL代码是:
CONVERT(date,ihhd.InvoiceDate,101) AS InvoiceDate
我的InvoiceDate结果是:2016-11-15
当我将相同的代码放入视图时,我得到了这个:
SQL执行错误。
执行SQL SELECT [selected fields]
错误来源:.Net SqlClient数据提供者
错误消息:无法在日期调用方法。
我试图将其转换为varchar:
CONVERT(varchar,ihhd.InvoiceDate,101) AS InvoiceDate
在视图窗口中不返回相同的错误。但是,使用此数据的报表编写者不允许使用" date-like"比较所以我需要日期格式的字段。
我也尝试过双重转换它:
CONVERT(date,CONVERT(varchar,ihhd.InvoiceDate,101),101) AS InvoiceDate
SQL窗口再次正常,视图窗口也出现了同样的错误。
我做错了什么?
答案 0 :(得分:0)
您正在将DATETIME转换为DATE,因此它将生成预期的yyyy-mm-dd。如果你想要MM / DD / YYYY,你需要转换为字符串。请记住,这个转换后的字符串不是日期,应该真正降级到表示层。
Select AsString = convert(varchar(10),GetDate(),101) -- notice the varchar(10)
,AsDate = convert(date,GetDate(),101)
返回
AsString AsDate
06/14/2017 2017-06-14
相反,您可以使用MM / DD / YYYY字符串并转换为日期
Select convert(date,'06/14/2017',101) -- If 2012+ try_convert()
返回
2017-06-14
答案 1 :(得分:0)
不能再生。
我刚在现有表中的datetime列上测试了此代码:
CREATE VIEW vDT
AS
SELECT CONVERT(date, [StartTime],101) AS tDate
FROM [dbo].[Trace20150811];
我没有错误,之后能够从视图中选择并获得预期的结果。
仔细检查您的代码,因为您收到错误的真正原因不在于您发布的代码中。如果找不到,请发布完整的视图代码而不做任何更改。