未记录的CONVERT样式 - 日期时间23

Ada*_*ski 4 t-sql sql-server datetime string-formatting sql-server-2008-r2

最近我偶然发现了CONVERT功能样式23,它非常方便,因为它给你DATE格式yyyy-mm-dd.问题是它没有在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)
Run Code Online (Sandbox Code Playgroud)

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

Aar*_*and 11

在很大程度上基于这篇文章,文档中还有很多其他文档丢失(自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,   8  ), (3,   8  ),
       (4,   8  ), (5,   8  ), (6,   9  ), (7,   10 ),
       (8,   8  ), (9,   26 ), (10,  8  ), (11,  8  ),
       (12,  6  ), (13,  24 ), (14,  12 ), (20,  19 ), 
       (21,  23 ), (22,  20 ), (23,  10 ), (24,  8  ),
       (25,  23 ), (100, 19 ), (101, 10 ), (102, 10 ),  
       (103, 10 ), (104, 10 ), (105, 10 ), (106, 11 ),  
       (107, 12 ), (108, 8  ), (109, 26 ), (110, 10 ),  
       (111, 10 ), (112, 8  ), (113, 24 ), (114, 12 ),  
       (120, 19 ), (121, 23 ), (126, 23 ), (127, 23 ),
       (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; 
Run Code Online (Sandbox Code Playgroud)

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