【问题标题】:Converting String to Date in View在视图中将字符串转换为日期
【发布时间】:2021-04-05 20:21:40
【问题描述】:

我这里有个问题,一开始我得convert把我视图中的日期(也就是一个字符串)变成Date,但是我不知道该怎么做。

这是我的示例:

CREATE VIEW [dbo].[DataFoodView]
AS
SELECT * FROM
( VALUES (1, N'mik', 5, '2020-5-2'),
         (1, N'coca', 5, '2020-5-2'))
AS SM (FID, Fname, Fcount, FDate);

但由于这个创建,我无法更改日期的格式。

PS:我必须在我的代码中使用这种视图。

【问题讨论】:

  • 请用您正在使用的数据库标记您的问题。
  • 我根据语法添加了“sql-server”标签。

标签: sql sql-server date view data-conversion


【解决方案1】:

您不应该在日期中使用字符串,并且您在问题中自己也提到了这一点。由于您使用的是 SQL Server,因此您可以在文本日期上使用 TRY_CONVERT

SELECT FID, Fname, Fcount, TRY_CONVERT(datetime, FDate) AS FDate
FROM [dbo].[DataFoodView];

但最好的解决方法是在视图定义中使用有效的日期文字:

CREATE VIEW [dbo].[DataFoodView]
AS
SELECT * FROM
( VALUES (1, N'mik', 5, '20200502'),
         (1, N'coca', 5, '20200502'))
AS SM (FID, Fname, Fcount, FDate);

现在日期字面量是明确的,表示您想要的。

【讨论】:

  • 我不想在 Date 中使用字符串,但我不知道如何以正确的格式使用它!顺便说一句,谢谢你的回答,你拯救了我的一天:)
【解决方案2】:

尝试使用转换功能

CREATE VIEW [dbo].[DataFoodView]
AS
SELECT * FROM
( VALUES (1, N'mik', 5, convert(datetime, '2020-5-2',120)),
         (1, N'coca', 5, convert(datetime, '2020-5-2',120)))
AS SM (FID, Fname, Fcount, FDate);

【讨论】:

    【解决方案3】:

    SQL Server 在识别日期格式方面非常灵活。所以你可以在SELECT中转换:

    CREATE VIEW [dbo].[DataFoodView] AS
        SELECT FID, Fname, Fcount, CONVERT(DATE, FDate) as FDate
        FROM ( VALUES (1, N'mik', 5, '2020-5-2'),
                      (1, N'coca', 5, '2020-5-2')
             ) AS SM(FID, Fname, Fcount, FDate);
    

    或者,您可以转换VALUES() 中的第一个值(或全部转换,如果您愿意):

    CREATE VIEW DataFoodView AS
        SELECT FID, Fname, Fcount, FDate
        FROM ( VALUES (1, N'mik', 5, CONVERT(DATE, '2020-5-2')),
                      (1, N'coca', 5, '2020-5-2')
             ) AS SM(FID, Fname, Fcount, FDate);
    

    Here 是一个 dbfiddle。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-27
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2016-05-03
      相关资源
      最近更新 更多