【问题标题】:Remove the zeros using SQL Server使用 SQL Server 删除零
【发布时间】:2019-04-14 16:35:06
【问题描述】:

您好,我正在使用 SQL Server,我有这个专栏:

data
6/19/2019 3:10:12 PM
12/23/2016 5:02:15 AM

我只想提取时间,所以我使用了以下查询:

select try_parse([data] as time using 'en-US') from Table_1

但问题是我得到了这样的结果:

15:10:12.0000000
05:02:15.0000000

除了 0 我的意思是我想得到之外一切都好:

15:10:12
05:02:15

非常感谢您的帮助!

【问题讨论】:

  • time 有一个刻度。试试time(0)。另一方面,您为什么将日期存储为varchar 而不是datetimedatetime2?此外,TRY_PARSEtime 是在 SQL Server 2012 中引入的,但是,您是否标记了 SQL Server 2008 和 2005?
  • 在继续之前,您应该花一些时间来了解数据类型。同样重要的是要了解这种格式通常最好在“表示层”中实现。如果这是用于报告或应用程序,则在其中格式化,而不是在数据库中。
  • 您可以将列转换为时间,如下所示。我假设列“数据”是日期数据类型。如果是,则从 table_1 中选择 cast(data as time)

标签: sql sql-server database sql-server-2008 sql-server-2005


【解决方案1】:
Declare @data varchar(28)='12/23/2016 5:02:15 AM'

select Convert(varchar(20),Cast(@data as time),24)

【讨论】:

  • 一定要在你的答案中添加上下文,这会很有帮助
  • 此外,将其转换为 varchar 没有任何好处。实际上恰恰相反。
【解决方案2】:

您可以使用具有正确比例的TIME() 来获得您想要的结果。

select Convert(time(0) , Data ) as time from Table_1

time(0) 表示比例为 0,精度为 8。结果为 HH:MM:SS。使用另一个比例,比如 1,会给你一个小数秒的数字。您可以阅读MS Docs中的所有音阶

【讨论】:

    【解决方案3】:

    试试这个

    select CONVERT(varchar(8),  data, 108) from Table_1
    

    仅显示时间 (17:00:59),但如果您希望完整格式日期为 dd/MM/yyyy hh:mm:ss,则可以在它们之间添加 +

    select CONVERT(varchar(10), data, 101) + ' ' + CONVERT(varchar(8), data, 108) from Table_1
    

    如果数据使用 DATETIME 类型,它们将起作用

    【讨论】:

      【解决方案4】:

      您可以使用以下查询提取时间

      SELECT CONVERT(VARCHAR(8), cast('12/23/2016 5:02:15 AM' as time),108)
      

      输出是-05:02:15。我希望这个查询/答案是不言自明的。

      【讨论】:

        猜你喜欢
        • 2011-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-10
        • 2021-04-30
        • 1970-01-01
        • 2019-05-11
        相关资源
        最近更新 更多