【问题标题】:Why does time conversion throw error ?为什么时间转换会抛出错误?
【发布时间】:2017-02-14 08:10:12
【问题描述】:

我正在尝试这个

  declare @OpeningTime varchar(10)
Declare @OpeningTimeFormatted time(7)

Set @OpeningTime= '12:00pm'
Set @OpeningTimeFormatted= (Select CONVERT(time, CONVERT(varchar,CONVERT(date, getdate()))+ @OpeningTime, 120))

Select @OpeningTimeFormatted

但它会引发错误:

Conversion failed when converting date and/or time from character string.

【问题讨论】:

标签: sql sql-server tsql sql-server-2014


【解决方案1】:

您的时间和日期之间需要一个空格。 只需将OpeningTime更改为

Set @OpeningTime= ' 12:00pm'

Set @OpeningTimeFormatted= (Select CONVERT(time, CONVERT(varchar,CONVERT(date, getdate())) + ' ' + @OpeningTime, 120))

否则你的 Date 看起来像2017-02-1412:00pm

【讨论】:

  • 但是这里仍然存在一些错误的想法,因为CONVERT(time,... 部分无论如何都会丢弃任何日期部分。目前尚不清楚 OP 究竟想要达到什么目的。
  • @Damien_The_Unbeliever 是的,没错。我不知道 OP 期待什么。
  • 也许只是从 12h 转换为 24h
【解决方案2】:

你需要一个空间:

Set `@OpeningTimeFormatted= (Select CONVERT(time, CONVERT(varchar,CONVERT(date, getdate()))+ ' ' + @OpeningTime, 120))`

【讨论】:

    【解决方案3】:

    您已将 @OpeningTimeFormatted 声明为 time(7) - 它不能保存日期。
    我怀疑您想在特定时间获取当前日期, 因此,您要将@OpeningTimeFormatted 声明为datetime2

    declare @OpeningTime varchar(10)
    Declare @OpeningTimeFormatted datetime2
    
    Set @OpeningTime= '12:00pm'
    
    SET  @OpeningTimeFormatted = convert(datetime2, 
                                         convert(char(10), getdate(), 120) +' '+
                                         convert(char(8), @OpeningTime, 120), 
                                 120)
    
    Select @OpeningTimeFormatted
    

    结果:

    14.02.2017 12:00:00 -- today, tomorrow of course the date would be different...
    

    另一方面,如果您只想获取 varchar 中指定的时间,则只需要 convert(time(7), @OpeningTime, 120)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-05
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 2018-12-10
      • 2019-06-13
      • 2021-06-17
      相关资源
      最近更新 更多