关于sp_helpdb中created列CONVERT转换失败的技术咨询
解决sp_helpdb日期转换失败的问题
嘿,我来帮你排查这个问题!你遇到的转换失败,核心原因是sp_helpdb返回的created列并不是datetime类型——它是一个字符串格式的日期(比如'Apr 7 2017'),所以直接用CONVERT去处理它肯定会出问题。咱们一步步解决:
第一步:创建匹配结构的临时表
首先要确保你的临时表结构和sp_helpdb的输出完全匹配,尤其是created列要定义为字符串类型(因为存储的是文本格式日期):
CREATE TABLE #TempDBInfo ( name sysname, db_size varchar(50), owner sysname, dbid smallint, created varchar(50), status varchar(MAX), compatibility_level tinyint );
第二步:插入sp_helpdb的结果
把存储过程的输出插入临时表:
INSERT INTO #TempDBInfo EXEC sp_helpdb;
第三步:转换日期并排序
现在需要先把字符串格式的日期转换成datetime类型,再转换成你想要的2017-04-07 00:00:00格式,同时按创建日期排序:
-- 先确保日期转换的语言环境正确(因为sp_helpdb返回英文月份缩写) SET LANGUAGE English; SELECT name, db_size, owner, dbid, -- 先转datetime,再转成目标格式 CONVERT(varchar(19), CAST(created AS datetime), 120) AS created_formatted, status, compatibility_level FROM #TempDBInfo -- 按转换后的datetime排序 ORDER BY CAST(created AS datetime) DESC;
关键说明:
sp_helpdb的created列是文本,不是日期类型,所以必须先通过CAST(created AS datetime)把它转换成SQL能识别的日期格式,再用CONVERT输出你想要的字符串格式。- 如果你的SQL Server默认语言不是英文,一定要加上
SET LANGUAGE English,否则像'Apr'这种英文月份缩写会无法被正确转换(比如中文环境下会识别失败)。
内容的提问来源于stack exchange,提问作者Francesco Mantovani
相关产品推荐
相关产品推荐

