sql - 无法将 Windows 计数器表中的字符转换为日期时间

标签 sql sql-server datetime sql-server-2012

我在 SQL Server 2012 中有一个表,其中使用内置 Windows 进程填充了 Windows perfmon 数据。该表是由该过程自动创建的。问题是时间戳字段是一个 char 但我需要一个 datetime
我在生成的表上使用 View 将数据转换为可用的形式,并且我想将时间戳转换为 View 中的日期时间。由于某种原因,我尝试的任何操作都会出现此错误:

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

我可以将表中的时间戳值复制并粘贴到转换查询中,它的工作原理如下:

SELECT convert(datetime, '2018-04-04 00:00:08.022', 121);

 SELECT cast('2018-04-04 00:00:08.022' as datetime)

但是当我尝试直接从表中转换值时,出现错误:

SELECT convert(datetime, counterDateTime, 121) from counterData

我通过选择具有已知正确格式的特定行排除了行中的一些奇怪格式,但我仍然遇到相同的错误。

我错过了什么?

编辑 重申一下,表中的所有值都采用相同的格式。该表是由将 perfmon 数据写入数据库的 Windows 进程自动创建的。我无法控制表中数据的格式。这并不特定于我正在测试的行以外的行,这涉及所有行。

示例:

select counterDateTime from counterData where recordindex = '82331' and counterID = '1'
= 2018-04-04 00:00:08.022

select cast('2018-04-04 00:00:08.022' as datetime)
= 2018-04-04 00:00:08.023

select convert(datetime, '2018-04-04 00:00:08.022', 121)
= 2018-04-04 00:00:08.023

select cast(counterDateTime as datetime) from CounterData where recordIndex = '82331'  and counterID = '1'
= Msg 241, Level 16, State 1, Line 109
Conversion failed when converting date and/or time from character string.

以下是将 Windows 计数器数据导入数据库的示例教程。这是一个非常标准的过程,网上还有更多示例。有趣的表是 CounterData 和 CounterDetails,我用 View 聚合它们。我想在创建这个 View 时进行转换。 https://logicalread.com/writing-performance-data-sql-server-mo01/#.WuxgzYgvyzU

我感兴趣的 CounterDateTime 列是长度为 24 的可为空字符。

最佳答案

我按照您的指示进行了测试,并且能够重现

SELECT ASCII(RIGHT(CounterDateTime, 1))
FROM dbo.CounterData

返回 0,这就是我认为您的数据无法转换的原因。所以基本上 最后一个字符为 ASCII 空。

解决方法是

SELECT CAST(LEFT(CounterDateTime, 23) AS DATETIME)
FROM dbo.CounterData

关于sql - 无法将 Windows 计数器表中的字符转换为日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50174801/

相关文章:

sql - 将用户凭据(用户名、密码)从 SQL DB 迁移到 Azure AD B2C

sql - 如何在 case 表达式中解决这个问题?

sql-server - 在并发环境中处理 max(ID)

c# - ServiceStack.Text JsonSerializer - SerializeToString 因 DateTime.Max 失败

php - 检查两个日期之间是否包含句点

php - SQL首先获取一会儿选择的id,然后从表中获取其他的?

c# - 论坛的 LINQ 查询

c# - 在哪里关闭SqlDataReader对象和SqlConnection对象?

sql - T-SQL 动态 GROUP BY 使用@parameters

PHP:如何从模式 H:i (17:45) 创建时间戳?