【问题标题】:SQL Server equivalent of TO_CHAR and format conversionSQL Server 等效 TO_CHAR 和格式转换
【发布时间】:2017-09-24 03:38:12
【问题描述】:

我想知道如何在 SQL Server 中转换 oracle 指令TO_CHAR(MY_COLUMN_NAME, 'YYYYMMDDHH24MISSFF3')。 (包含日期的列)

我想我可以在 SQL Server 中使用 CONVERT(VARCHAR(19), MY_COLUMN_NAME, 120); 将日期转换为 YYYY-MM-DD 格式,但是 YYYYMMDDHH24MISSFF3 格式呢?

【问题讨论】:

  • 您是否尝试过使用更大的 varchar? 10 个字符只够容纳 YYYY-MM-DD;之后的任何内容都会被截断。
  • 尝试强制转换(将(MY_COLUMN_NAME 作为日期)转换为 varchar)

标签: sql-server oracle


【解决方案1】:

您可以使用 Format()。我应该注意,它不是表演者,但确实有一些不错的功能

Select DateTime   = GetDate()
      ,Formatted = format(GetDate(),'yyyyMMddHHmmssfff')

返回

DateTime                  Formatted
2017-04-26 12:04:01.363   20170426120401363

【讨论】:

  • +1 用于提及性能。在我的系统和DBFiddle 上的测试中,CONVERT 在 100,000 行样本上的执行速度提高了大约 15 倍。这并不完全是一个可靠的测试,但它确实显示出足够大的差异,可以被认为是显着的(在我看来)。
  • @GarethD 我也运行了一些基准测试。但我见证了接近 100% 而不是 100 次的结果……例如 140 毫秒与 312 毫秒。喜欢 dbfiddle!
【解决方案2】:

在 MS SQL 2012+ 中有 FORMAT 函数:

SELECT FORMAT(GETDATE(), 'yyyyMMddHHmmssfff')

【讨论】:

    【解决方案3】:

    您可以使用格式命令 (https://docs.microsoft.com/en-us/sql/t-sql/functions/format-transact-sql) 访问 .net 提供的所有功能。大概您使用的是相对最新版本的 sql server - 这是您在发布问题时应该提供的信息。举个例子(我不知道你的 oracle 格式会生成什么):

    declare @x datetime; 
    set @x = '20170415 23:55:01.003';
    select @x, FORMAT(@x, 'yyyyMMdd HHmmss.fff');
    

    【讨论】:

      【解决方案4】:

      在 SQL Server 2012 之前,您可以使用 convert() styles 和 replace()

      select 
          iso_format = convert(varchar(23),getdate(),121)
        , numbers_only = replace(replace(replace(replace(
                convert(varchar(23),getdate(),121)
                 ,'-',''),':',''),' ',''),'.','')
      

      rextester 演示:http://rextester.com/YMMG65247

      返回:

      +-------------------------+-------------------+
      |       iso_format        |   numbers_only    |
      +-------------------------+-------------------+
      | 2017-04-26 18:15:42.590 | 20170426181542590 |
      +-------------------------+-------------------+
      

      请注意,format() 确实存在一些性能问题,即使在 SQL Server 2012+ 上,这也可能是一个合理的替代方案。 format() is nice and all, but… - Aaron Berrtand

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-16
        • 2018-11-20
        • 1970-01-01
        • 2014-10-22
        • 1970-01-01
        • 2019-01-23
        • 1970-01-01
        • 2014-04-09
        相关资源
        最近更新 更多