5

最近、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)

このスタイルは非常に便利で、私はそれを見逃していましたが、私の懸念は次のとおりです。-安全に使用できますか?非推奨または誤って侵入し、将来のエディション/アップデートで削除される可能性がありますか?-他の隠されたスタイルを知っている人はいますか?

4

3 に答える 3

12

主にこの記事に基づいて、ドキュメントに欠けているものが他にもたくさんあります (そして、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; 

もちろん、多くの文書化されていないものと同様に、「秘密」のものは自己責任で使用してください。アップグレード前にテストできるように、モジュールを使用する場所にマークを付ける必要があります。アップグレード アドバイザー、ベスト プラクティス アナライザー、非推奨トレース イベント、拡張イベントなどがピックアップして通知するものではありません。 Microsoft は独自の裁量で文書化されていない機能/構文を自由に削除できるため (ただし、文書化することに関心がなくても、これらのいずれかを削除する可能性は非常に低いと思います)。サービス パック/アップグレードを展開するテスト サーバーがある場合、そのようなアップグレードの後に​​このコードを実行すると、ここで使用されているスタイルが削除されているかどうかがわかります。したがって、このコードをどこかに保存して、実際に使用している文書化されていないスタイル番号のみを含めることをお勧めします。

于 2013-03-21T18:30:06.510 に答える
4

スタイル 23 の特定のケースについては...このような単純な文書化された代替手段があるため、使用しないことをお勧めします。

SELECT CONVERT(CHAR(10),GETDATE(),120)
于 2013-03-21T20:20:08.483 に答える