You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2012中Windows计数器表char转datetime失败求助

解决SQL Server 2012中Char类型时间戳转Datetime的报错问题

嘿,我太懂这种转换报错的糟心了!Perfmon自动生成的表经常搞这种“非主流”的时间格式存储,咱们一步步来搞定它:

第一步:先搞清楚你的时间戳字符串到底是什么格式

首先得确认Char字段里的时间长啥样,比如是20240520143000(yyyyMMddHHmmss)还是05/20/2024 14:30:00(MM/dd/yyyy HH:mm:ss),跑这条SQL查几个样本:

SELECT TOP 10 YourTimestampColumn FROM YourPerfmonTable;

第二步:根据格式选对应的转换方法

情况1:标准格式但SQL Server没自动识别

如果是常见的标准格式,用CONVERT函数指定样式号就行,比如:

  • 要是格式是yyyy-MM-dd HH:mm:ss(ODBC标准):
    CONVERT(DATETIME, YourTimestampColumn, 120)
    
  • 要是美国格式MM/dd/yyyy HH:mm:ss:
    CONVERT(DATETIME, YourTimestampColumn, 101)
    

常用样式号我给你列几个:

  • 100:默认的mon dd yyyy hh:miAM(或PM)
  • 121:带毫秒的yyyy-MM-dd HH:mm:ss.mmm

情况2:非标准格式(比如无分隔符的yyyyMMddHHmmss)

这种就得先拆分字符串再拼接成标准格式,再转换。比如针对20240520143000:

TRY_CONVERT(DATETIME, 
    SUBSTRING(YourTimestampColumn, 1, 4) + '-' +  -- 年
    SUBSTRING(YourTimestampColumn, 5, 2) + '-' +  -- 月
    SUBSTRING(YourTimestampColumn, 7, 2) + ' ' +  -- 日
    SUBSTRING(YourTimestampColumn, 9, 2) + ':' +  -- 时
    SUBSTRING(YourTimestampColumn, 11, 2) + ':' + -- 分
    SUBSTRING(YourTimestampColumn, 13, 2)         -- 秒
)

情况3:存在脏数据(部分字符串根本不是有效时间)

这时候别用CONVERT,改用TRY_CONVERT!SQL Server 2012开始支持这个函数,它会在转换失败时返回NULL,而不是直接让整个视图报错。比如:

TRY_CONVERT(DATETIME, YourTimestampColumn, 120) AS ConvertedTimestamp

之后你还能排查哪些是脏数据:

SELECT YourTimestampColumn 
FROM YourPerfmonTable
WHERE TRY_CONVERT(DATETIME, YourTimestampColumn, 120) IS NULL;

第三步:把转换逻辑写到视图里

举个完整的例子,假设你的表叫PerfmonRawData,时间戳列是PerfTimestamp(格式是yyyyMMddHHmmss),视图可以这么写:

CREATE VIEW vw_PerfmonCleanData
AS
SELECT
    TRY_CONVERT(DATETIME, 
        SUBSTRING(PerfTimestamp, 1, 4) + '-' +
        SUBSTRING(PerfTimestamp, 5, 2) + '-' +
        SUBSTRING(PerfTimestamp, 7, 2) + ' ' +
        SUBSTRING(PerfTimestamp, 9, 2) + ':' +
        SUBSTRING(PerfTimestamp, 11, 2) + ':' +
        SUBSTRING(PerfTimestamp, 13, 2)
    ) AS PerfDatetime,
    CounterName,
    CounterValue,
    MachineName
FROM PerfmonRawData;

这样就能在视图里得到可用的Datetime类型时间戳啦!

内容的提问来源于stack exchange,提问作者ewanc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:03:43