【问题标题】:Converting a String with Length of Time into Different DataType将具有时间长度的字符串转换为不同的数据类型
【发布时间】:2019-09-26 08:29:29
【问题描述】:

我在 sql server 中工作,并提供了一个文件,该文件有一个“持续时间”列,其中包含时间长度的字符串类型值,格式为 HH:MM:SS。

例子:

Duration:
00:01:34, 
00:25:20, 
01:01:53

我正在尝试弄清楚如何将这些字符串转换为一种数据类型,我可以使用这些数据类型来计算“平均持续时间”和“总持续时间”等我显然无法在字符串上运行的数据。

我以相同的方式格式化了所有值,并尝试使用 CAST 和 CONVERT 将数据类型更改为时间。

我的查询将开始运行并转换几千行,但随后出错并显示以下错误消息:

从字符串转换日期和/或时间时转换失败。

尝试 CAST:

SELECT CAST(Duration as time)
FROM TABLE

尝试转换:

SELECT CONVERT(time, Duration)
FROM TABLE

转换从我的文件开始,当我查看结果选项卡时,结果看起来符合预期,采用 HH:MM:SS.nnnnnnn 格式,但在几千行后查询出错。

我只是在以完全错误的方式处理这件事吗?我唯一能想到的另一件事可能是分解字符串,计算时间长度并将其存储在几秒钟内,然后在运行任何聚合计算后重新计算持续时间。不过,我希望有更直接的方法可以到达那里。

【问题讨论】:

  • 听起来您有一些无法转换的值。请改用 TRY_CONVERT。然后当字符串无效时返回NULL。

标签: sql sql-server types sqldatatypes string-conversion


【解决方案1】:

您有不匹配的数据。如果您不关心不匹配项(即,如果将看起来不像时间值的值转换为 NULL),则可以使用 TRY_CAST()TRY_CONVERT()

如果你想找到有问题的值:

SELECT Duration
FROM TABLE
WHERE TRY_CAST(Duration as time) IS NULL AND Duration IS NOT NULL

【讨论】:

  • 谢谢!当我查找与所有结果不匹配的值时,小时位置超过 23。
  • @Jessie 。 . .这不是 SQL Server 中的有效时间。如果你愿意,你可以问另一个关于如何处理它们的问题。
猜你喜欢
  • 1970-01-01
  • 2012-12-21
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
相关资源
最近更新 更多