sql-server – 未记录的CONVERT样式 – datetime 23

最近我偶然发现了CONVERT函数样式23,这非常方便,因为它以格式yyyy-mm-dd给你DATE.问题是它没有在msdn中记录! (在CONVERT上的F1之后从SSMS帮助链接:
http://msdn.microsoft.com/en-us/library/ms187928%28SQL.105%29.aspx).

例:

select convert( date,'2012-01-30',23)
select convert(varchar(255),getdate(),23)

这种风格非常有用,我一直都错过了,但我担心的是:
– 使用安全吗?它是否被弃用或潜入,可能会在将来的版本/更新中被删除?
– 有人知道其他隐藏的风格吗?

解决方法

主要基于
this article,文档中还有很多其他文档丢失(自2005年以来可能已经引入了更多文档,自从我尝试探索以来已经有一段时间了):

--DROP TABLE dbo.DateTimeStyles;
CREATE TABLE dbo.DateTimeStyles
(  
    styleID TINYINT PRIMARY KEY,outputLength TINYINT,outputSyntax AS (CONVERT(VARCHAR(255),'CONVERT(CHAR(' 
        + RTRIM(outputLength) + '),CURRENT_TIMESTAMP,' 
        + RTRIM(styleID) + ')')),outputSample VARCHAR(255)
); 

INSERT dbo.DateTimeStyles(styleID,outputLength) 
VALUES (0,19 ),(1,8  ),(2,(3,(4,(5,(6,9  ),(7,10 ),(8,(9,26 ),(10,(11,(12,6  ),(13,24 ),(14,12 ),(20,(21,23 ),(22,20 ),(23,(24,(25,(100,(101,(102,(103,(104,(105,(106,11 ),(107,(108,(109,(110,(111,(112,(113,(114,(120,(121,(126,(127,(130,32 ),(131,25 );

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'UPDATE dbo.DateTimeStyles 
        SET outputSample = ' + outputSyntax + ' 
        WHERE styleID = ' + RTRIM(StyleID) + ';'
    FROM dbo.DateTimeStyles; 

EXEC sp_executesql @sql;

SELECT styleID,outputSyntax,outputSample
  FROM dbo.DateTimeStyles
  ORDER BY styleID;

当然,与许多未记载的内容一样,使用“秘密”内容需要您自担风险.您应该在使用它们的位置标记模块,以便在升级之前对它们进行测试 – 它们不会是升级顾问,最佳实践分析器,弃用跟踪事件,扩展事件等等,它们将会提取并告诉您,因为微软可以自由决定删除任何未记录的功能/语法(尽管我发现它们不太可能删除任何这些,即使他们对记录它们不感兴趣).如果您有一个部署Service Pack /升级的测试服务器,那么在任何此类升级之后运行此代码将告诉您此处使用的任何样式是否已被删除.因此,您可能希望将此代码保存在某处,并且仅包含您主动使用的未记录的样式编号.

相关文章

发表回复

您的电子邮箱地址不会被公开。