繁体   English   中英

SQL Server:从字符串转换时间时转换失败

[英]SQL Server: Conversion failed when converting time from character string

我在下面的一列具有数据类型char(24)但是数据包含一个日期

我想将数据转换为datetime以便可以像这样从过去的一个小时中选择数据:

Where CounterDateTime   >= DateAdd(hour, -1, getDate())

但我不断出现错误:

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

即使我将CounterDateTime转换为datetime 请帮忙。

您可以像这样将列转换为日期时间:

Where CounterDateTime IS NOT NULL AND Cast(RTRIM(LTRIM(CounterDateTime)) as DateTime) >= DateAdd(hour, -1, getDate())

这也可以工作:

Where CounterDateTime IS NOT NULL AND CONVERT(datetime, RTRIM(LTRIM(CounterDateTime)), 121) >= DateAdd(hour, -1, getDate())

还有1个:

Where CounterDateTime IS NOT NULL AND try_parse(RTRIM(LTRIM(CounterDateTime)) as DateTime using 'en-US') >= DateAdd(hour, -1, getDate())

不要将日期/时间值存储为字符串。 这可能会导致问题。

下一个大问题是依靠隐式转换。 如果必须转换值,请明确进行转换。 所以:

Where try_convert(datetime, CounterDateTime) >= DateAdd(hour, -1, getDate())

您显然拥有无法转换的值。 你不知道为什么。 您可以使用查询找到以下值:

select CounterDateTime
from t
where try_convert(datetime, CounterDateTime) is null and
      CounterDateTime is not null;

这将返回无法转换的非NULL值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM