【问题标题】:after converting date only getting date not time转换日期后只得到日期而不是时间
【发布时间】:2018-01-24 16:02:21
【问题描述】:

我试图在 Sql Server 2008 中将日期转换为 mm/dd/yy 格式,但转换后我只有格式化的日期,但在我的数据库中也有时间。我的数据库值是:

2003-02-28 17:22:43.000
2003-02-28 17:22:43.000
2003-02-28 17:24:26.000
2003-02-28 17:24:26.000
2003-03-24 09:45:25.000
2003-03-24 09:45:25.000
2003-03-24 09:46:36.000
2003-03-24 09:46:36.000
2006-07-20 12:47:31.070
2003-03-27 15:44:53.000
2003-03-27 15:44:53.000
2003-03-27 15:51:56.000
2003-03-27 15:51:56.000
2003-03-27 16:05:03.000

我对转换日期格式的查询是

SELECT CONVERT(VARCHAR(20), StatusDate, 101) AS Post_Converted,StatusDesc, RowVersionInitials from PurchaseOrderStatusHistory

我的输出是

05/29/2014
05/29/2014
05/29/2014
05/29/2014

日期已成功格式化,但缺少“时间”。请建议我如何获得数据库时间。

【问题讨论】:

  • 可以看出here datetime 的 101 格式仅输出日期。选择适合您需要的其他格式

标签: sql database sql-server-2008


【解决方案1】:

由于某种原因,SQL Server 不提供带有时间组件的 mm/dd/yyyy。我建议您使用 120 格式(ISO 标准格式),但您是专门针对这一点提出要求的。

您可以将这些值连接在一起:

SELECT CONVERT(VARCHAR(20), StatusDate, 101) + ' ' + CONVERT(VARCHAR(20), StatusDate, 108) AS Post_Converted,
       StatusDesc, RowVersionInitials 
FROM PurchaseOrderStatusHistory;

您可能需要 114 而不是 108:

SELECT CONVERT(VARCHAR(20), StatusDate, 101) + ' ' + CONVERT(VARCHAR(8), StatusDate, 114) AS Post_Converted,
       StatusDesc, RowVersionInitials 
FROM PurchaseOrderStatusHistory;

这使您可以灵活地添加毫秒。

【讨论】:

    【解决方案2】:

    CONVERT 接受第三个参数,在您的情况下是 101 来指定格式。

    Find details here

    你需要的是 - 大概 - 这个

    SELECT CONVERT(VARCHAR(20), StatusDate, 120) 
    

    ...或其他适当的输出格式。

    对于 SQL Server 2012+,有 FORMAT(),但对于 v2008,您不能使用它...

    【讨论】:

      猜你喜欢
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多