【问题标题】:Convert Datetime to Varchar exactly as is完全按原样将 Datetime 转换为 Varchar
【发布时间】:2014-10-21 17:15:46
【问题描述】:

我正在尝试将日期时间完全转换为 varchar。

所以我想要以下内容:

SELECT CONVERT(varchar(30),'2014-10-21 12:02:22.555')

每次都准确返回 2014-10-21 12:02:22.555。我对此进行了一些研究,但我看不出将完整日期转换为 varchar 这样的选项有什么不同。仅使用基本的 convert(varchar(30),最后没有选项,这是否适用于所有日期?

【问题讨论】:

  • 为什么需要这样做?这听起来应该是您的演示代码而不是 SQL 的问题。
  • 在您的问题中,您将字符串转换为VARCHAR(30),这没有任何意义(或者更确切地说,它什么都不做)。您的意思是将字符串转换为DATETIME,反之亦然?
  • 我实际上是在不支持传入日期时间的 hashbytes 函数中使用它,所以我需要对其进行转换。 SELECT HASHBYTES('md5',Datetime) 失败
  • 啊哈,现在这是一个完全不同的问题。您可能希望对其进行编辑以使其清晰。 HASHBYTES 确实对二进制数据进行操作,所以一个简单的 CONVERT(BINARY(8), datetime) 应该可以。
  • 我正在一次将多个列添加到持久计算列中。这就是我寻找 varchar 值的原因。下面的答案正是我所需要的。

标签: sql sql-server sql-server-2008 ssms


【解决方案1】:

“完全一样”并不正确 - something stored in the DATETIME format is actually stored as two integers。当您选择它时,您看到的实际上只是这两个整数,以某种方式格式化。这样做的好处是许多应用程序可以识别 DATETIME 数据类型,并允许您使用无法应用于字符字段的函数和格式(例如 DATENAME、DATEADD 等)

要将其转换为 SQL Server Management Studio 将显示的默认格式的 varchar,您可以使用 format code 121,如下所示:

SELECT CONVERT(VARCHAR(30), GETDATE(),121)

这将返回 2014-10-21 13:24:31.353,这与 SSMS 默认显示的格式相同。

【讨论】:

    【解决方案2】:

    这是所有样式的一些测试 sql。使 nvarchar(max) 更短以修剪(例如 nvarchar(10))。

     DECLARE @now datetime
        SET @now = GETDATE()
        select convert(nvarchar(MAX), @now, 0) as output, 0 as style 
        union select convert(nvarchar(MAX), @now, 1), 1
        union select convert(nvarchar(MAX), @now, 2), 2
        union select convert(nvarchar(MAX), @now, 3), 3
        union select convert(nvarchar(MAX), @now, 4), 4
        union select convert(nvarchar(MAX), @now, 5), 5
        union select convert(nvarchar(MAX), @now, 6), 6
        union select convert(nvarchar(MAX), @now, 7), 7
        union select convert(nvarchar(MAX), @now, 8), 8
        union select convert(nvarchar(MAX), @now, 9), 9
        union select convert(nvarchar(MAX), @now, 10), 10
        union select convert(nvarchar(MAX), @now, 11), 11
        union select convert(nvarchar(MAX), @now, 12), 12
        union select convert(nvarchar(MAX), @now, 13), 13
        union select convert(nvarchar(MAX), @now, 14), 14
        --15 to 19 not valid
        union select convert(nvarchar(MAX), @now, 20), 20
        union select convert(nvarchar(MAX), @now, 21), 21
        union select convert(nvarchar(MAX), @now, 22), 22
        union select convert(nvarchar(MAX), @now, 23), 23
        union select convert(nvarchar(MAX), @now, 24), 24
        union select convert(nvarchar(MAX), @now, 25), 25
        --26 not valid
        union select convert(nvarchar(MAX), @now, 100), 100
        union select convert(nvarchar(MAX), @now, 101), 101
        union select convert(nvarchar(MAX), @now, 102), 102
        union select convert(nvarchar(MAX), @now, 103), 103
        union select convert(nvarchar(MAX), @now, 104), 104
        union select convert(nvarchar(MAX), @now, 105), 105
        union select convert(nvarchar(MAX), @now, 106), 106
        union select convert(nvarchar(MAX), @now, 107), 107
        union select convert(nvarchar(MAX), @now, 108), 108
        union select convert(nvarchar(MAX), @now, 109), 109
        union select convert(nvarchar(MAX), @now, 110), 110
        union select convert(nvarchar(MAX), @now, 111), 111
        union select convert(nvarchar(MAX), @now, 112), 112
        union select convert(nvarchar(MAX), @now, 113), 113
        union select convert(nvarchar(MAX), @now, 114), 114
        union select convert(nvarchar(MAX), @now, 120), 120
        union select convert(nvarchar(MAX), @now, 121), 121
        --122 to 125 not valid
        union select convert(nvarchar(MAX), @now, 126), 126
        union select convert(nvarchar(MAX), @now, 127), 127
        --128, 129 not valid
        union select convert(nvarchar(MAX), @now, 130), 130
        union select convert(nvarchar(MAX), @now, 131), 131
        --132 not valid
        order BY style
    

    这是结果

    output                   style
    Apr 28 2014  9:31AM          0
    04/28/14                     1
    14.04.28                     2
    28/04/14                     3
    28.04.14                     4
    28-04-14                     5
    28 Apr 14                    6
    Apr 28, 14                   7
    09:31:28                     8
    Apr 28 2014  9:31:28:580AM   9
    04-28-14                     10
    14/04/28                     11
    140428                       12
    28 Apr 2014 09:31:28:580     13
    09:31:28:580                 14
    2014-04-28 09:31:28          20
    2014-04-28 09:31:28.580      21
    04/28/14  9:31:28 AM         22
    2014-04-28                   23
    09:31:28                     24
    2014-04-28 09:31:28.580      25
    Apr 28 2014  9:31AM          100
    04/28/2014                   101
    2014.04.28                   102
    28/04/2014                   103
    28.04.2014                   104
    28-04-2014                   105
    28 Apr 2014                  106
    Apr 28, 2014                 107
    09:31:28                     108
    Apr 28 2014  9:31:28:580AM   109
    04-28-2014                   110
    2014/04/28                   111
    20140428                     112
    28 Apr 2014 09:31:28:580     113
    09:31:28:580                 114
    2014-04-28 09:31:28          120
    2014-04-28 09:31:28.580      121
    2014-04-28T09:31:28.580      126
    2014-04-28T09:31:28.580      127
    28 جمادى الثانية 1435  9:31:28:580AM    130
    28/06/1435  9:31:28:580AM    131
    

    参考页面link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-09
      • 2017-11-29
      • 2021-03-26
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      相关资源
      最近更新 更多