【问题标题】:date conversion from hhmmss to hhmm returns error in sql从 hh mm ss 到 hh mm 的日期转换在 sql 中返回错误
【发布时间】:2016-05-04 20:01:58
【问题描述】:

我的 SQL Server 表中有 StartTimeEndTime 列,显示为 hhmmss(例如:090000

我希望将其转换为 9:30 使用

 CONVERT(varchar(5), StartTime, 108) AS Start_Time, 
 CONVERT(varchar(5), EndTime, 108) AS End_Time

但我得到一个错误:

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

任何输入?

【问题讨论】:

  • 你的时区是多少?您可以使用IsDate() 来查看StartTimeEndTime 是否也不是有效日期。 starttime 和 endtime 的数据类型是什么?
  • 我目前看不到该代码如何返回该错误消息。您似乎正在将日期时间数据类型转换为 varchar(5),但错误消息却相反。您确定您没有尝试将这些值插入到日期时间字段中吗?
  • 您确实应该将格式留给前端,并将您的数据作为本机类型返回。我希望你使用的是时间数据类型,但我感觉你不是。
  • @Jon 数据类型为日期时间
  • 这不是你的错误信息所说的 - 一定有一些误解。

标签: sql sql-server date reporting-services type-conversion


【解决方案1】:

如果您的值是日期时间数据类型,您可以使用格式函数。

FORMAT(StartTime, 'hhmm') AS Start_Time,
FORMAT(EndTime, 'hhmm') AS End_Time

查看SqlFiddle 上的示例并阅读有关FORMAT 的更多信息。

【讨论】:

  • 是的,数据类型是日期时间。知道如何在 sql 查询中使用它吗?
  • 我在答案中添加了示例并链接到 msdn。
【解决方案2】:

如果您的时间列具有 int 数据类型,那么您应该尝试如下所示,

DECLARE @yourtime AS INT = '093000'
SELECT CONVERT(VARCHAR(5),STUFF(STUFF(STUFF(@yourtime ,1 ,0 ,REPLICATE('0' ,6- LEN(@yourtime))),3,0,':'),6,0,':'),108) AS Start_Time,
CONVERT(VARCHAR(5),STUFF(STUFF(STUFF(@yourtime ,1 ,0 ,REPLICATE('0' ,6- LEN(@yourtime))),3,0,':'),6,0,':'),108) AS End_Time

或者如果你想将其设置为 SSRS 表达式,你应该在下面尝试,

=Format(Fields!StartTime.Value,"hh:mm")

=Format(Fields!EndTime.Value,"hh:mm")

【讨论】:

    猜你喜欢
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    相关资源
    最近更新 更多