66

白天我无数次将记录从 SQL Server Management Studio 复制并粘贴到 Excel。

我的问题是如下图所示的DateTime8/23/2013 4:51:02 PM不能正确显示,即使它在函数框中正确显示。

在此处输入图像描述

更改数据类型以ShortDate修复显示问题,但这样做很乏味,因为我有很多日期字段要格式化。由于 Excel 和 SQL Server 都是 Microsoft 产品,因此人们希望 Excel 能够正确显示日期字段。

编辑:所以这似乎是 Excel 的显示问题。我将我的 Management Studio 结果复制到记事本并从那里复制到 Excel 中,但我仍然遇到同样的问题。2013-08-23 16:52:11.493从记事本复制到 Excel 将显示52:11.5(显示分钟、秒和四舍五入的毫秒)。Excel版本是2010。

有什么想法可以简化这个吗?

4

11 回答 11

92

我也遇到了这个问题,只需将 DATETIME 字段从 SQL Management Studio 复制并粘贴到 Excel 进行操作。Excel 具有正确的 DATETIME 值(即使在粘贴后应用了格式),但默认情况下没有内置格式来显示 SQL DATETIME。这是修复:

右键单击单元格,然后选择设置单元格格式。选择自定义。在类型:输入字段中输入

yyyy-mm-dd hh:mm:ss.000

参考: http: //office.microsoft.com/en-us/excel-help/create-a-custom-number-format-HP010342372.aspx

于 2014-04-29T22:42:31.987 回答
25

我和安德烈有同样的问题。似乎没有直接的解决方案,但是只要您可以生活在 SMALLDATETIME 的限制范围内,生成数据的查询中的 CAST 就可以解决问题。在以下查询中,第一列在 Excel 中的格式不正确,而第二列则正确。

选择 GETDATE()、CAST(GETDATE() 作为 SMALLDATETIME)

也许 DATETIME 和 DATETIME2 中秒的小数部分会使 Excel 感到困惑。

于 2014-01-29T15:06:55.387 回答
14

这是一篇很老的帖子,但我最近遇到了这个问题,对我来说,下面通过格式化 SQL 解决了这个问题,如下所示,

SELECT CONVERT (varchar, getdate(), 120) 作为日期

如果您从 SQL Server 复制结果并粘贴到 Excel 中,则 Excel 具有正确的格式。

于 2018-11-27T04:09:16.227 回答
7

找到了一个不需要记住和重新输入自定义日期时间格式的解决方案yyyy-mm-dd hh:mm:ss.000

  • 在新单元格上,写下任何一个=NOW()或任何有效的日期+时间,例如5/30/2017 17:35:它将以您的语言正确显示,例如5/30/2017 5:35:00 PM
  • 选择单元格,单击格式刷图标(画笔)
  • 现在单击要应用格式的列的行标题。

这会将正确的日期时间格式复制到整个列,使其正确显示。

于 2017-05-30T13:39:27.483 回答
5

我知道现在回答这个问题为时已晚。但是,当我遇到同样的问题时,我认为分享我是如何解决这个问题的仍然会很好。这就是我所做的。

  • 在复制数据之前,在 Excel 中选择列并选择“格式化单元格”并选择“文本”并单击“确定”(因此,如果您的 SQL 数据的第三列为日期时间,则将此格式应用于 excel 中的第三列) 步骤1
  • 现在,将数据从 SQL 复制并粘贴到 Excel,它将具有正确格式的日期时间值。 第2步
于 2018-02-16T13:15:43.090 回答
3

虽然不是您问题的完整答案,但 Excel 中有快捷键可以将所选单元格的格式更改为日期或时间(不幸的是,我没有找到日期+时间的格式)。

因此,如果您只是在寻找日期,您可以执行以下操作:

  1. 从 SQL Server Management Studio 复制范围
  2. 粘贴到 Excel
  3. 选择您需要格式化为日期的单元格范围
  4. Ctrl+ Shift+3

要格式化为 Times,请使用Ctrl++ 。Shift2

您可以在 SQL SERVER 中使用它

SELECT CONVERT(nvarchar(19),ColumnName,121) AS [Changed On] FROM Table

于 2014-07-14T15:46:20.157 回答
3

请尝试以下操作:将“2004-06-01 00:00:00.000”粘贴到 Excel 中。

现在尝试将“2004-06-01 00:00:00”粘贴到 Excel 中。

粘贴时Excel似乎无法处理毫秒...

于 2014-02-03T17:37:11.500 回答
1

这是一个简单的宏,可以在从 SSMS 粘贴数据后运行。如果您将其复制到您的 PERSONAL.XLSB 文件并将按钮添加到快速访问工具栏或功能区中的新自定义组/选项卡,这是最简单的。粘贴后立即运行宏,同时仍选择数据。如果在数据中选择了单个单元格,它也可以运行 - 它会在运行之前自动选择当前区域(与 ctrl-a 相同)。要仅对数据子集运行宏,请在运行前选择所需的子集。它可以处理包括或不包括标题的数据,但假设当前区域中至少有 2 行。

它有效地测试每一列以查看第一个非 NULL 值是否看起来是奇怪格式的日期/时间值。如果是,它会将整个列设置为默认的系统日期/时间格式,即使您的日期格式是“d/m/y”。

Sub FixSSMSDateFormats()

'Intended for copied data from SSMS and handles headers included
'For selection or current area, checks each column...
'   If the first non-NULL value is in strange time format, then change entire column to system date/time format

Dim values As Variant, r As Long, c As Long

If Selection.Count = 1 Then Selection.CurrentRegion.Select

values = Selection.Value

For c = 1 To UBound(values, 2)

    For r = 2 To UBound(values, 1)
    
        If TypeName(values(r, c)) = "Double" Then
            If values(r, c) > 1 And Selection(r, c).NumberFormat = "mm:ss.0" Then
                Selection.Columns(c).NumberFormat = "m/d/yyyy h:mm"
            End If
            Exit For
        ElseIf values(r, c) <> "NULL" Then
            Exit For
        End If
    
    Next

Next

End Sub
于 2021-02-19T00:21:26.253 回答
1

这是一个可能有帮助的技巧......它在时间值前面放了一个撇号,所以当您右键单击 SSMS 中的输出并说“使用标题复制”,然后粘贴到 Excel 中时,它会保留毫秒/ datetime2 值的纳秒。将撇号放在那里有点难看,但它比处理 Excel 对时间值进行不必要的舍入的挫败感要好。日期是英国格式,但您可以查看 MSDN 中的 CONVERT 功能页面。

SELECT CONVERT(VARCHAR(23), sm.MilestoneDate, 103) AS MilestoneDate, '''' + CONVERT(VARCHAR(23), sm.MilestoneDate, 114) AS MilestoneTime 从 SomeTable sm

于 2015-11-02T16:29:57.610 回答
0

当我从 SQL Server 生成大量临时报告并将它们复制/粘贴到 Excel 中时,我已经有一段时间遇到同样的问题了。我也欢迎一个合适的解决方案,但我的临时解决方法是在 Excel 中创建一个默认宏,它将突出显示的单元格转换为 Excel 的日期时间格式,并将其分配给热键(在我的情况下为 Shift-Ctrl-D)。所以我打开 Excel,从 SSMS 复制/粘贴到新的 Excel 工作表中,突出显示要转换的列,然后按 Shift-Ctrl-D。任务完成。

于 2014-08-06T09:34:05.837 回答
0

将数据从 ssms 复制到 excel 时,我遇到了同样的问题。日期格式搞砸了。最后,我将笔记本电脑的系统日期格式从 yyyy/mm/dd 更改为 yyyy-mm-dd。一切正常。

于 2021-01-12T06:14:39.070 回答