如何在创建SQL视图时从日期时间获取日期?

时间:2017-06-14 17:39:03

标签: sql sql-server date datetime sql-convert

我搜索了几个小时,发现了很多关于如何将日期时间字段转换为日期的信息。所有这些都在我的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窗口再次正常,视图窗口也出现了同样的错误。

我做错了什么?

2 个答案:

答案 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];

我没有错误,之后能够从视图中选择并获得预期的结果。

仔细检查您的代码,因为您收到错误的真正原因不在于您发布的代码中。如果找不到,请发布完整的视图代码而不做任何更改。