2

日時の年の部分を現在の年にする他の簡単な方法はありますか?そうでない場合、どちらがパフォーマンスの面で優れていますか?

試行#1:

CAST(DATEPART(MONTH, mydate) AS VARCHAR) + '/' + 
CAST(DATEPART(DAY, mydate) AS VARCHAR) + '/' +
CAST(YEAR(GETDATE()) AS VARCHAR) AS DATETIME 

試み#2:

DATEADD(YEAR, DATEDIFF(YEAR,  mydate, GETDATE()), mydate)
4

2 に答える 2

3

パフォーマンスの違いはごくわずかですが、どちらか速い方です。違いはマイクロ秒の範囲になります。

私は通常、好みの問題としてDATEADD+DATEDIFFを使用します。VARCHARバージョンの正しい形式は、ISO-8601形式YYYYMMDDを使用することです。

CAST(STUFF(CONVERT(char(8),mydate,112),1,4,YEAR(GETDATE())) as DATETIME)

CONVERT(,,112)=> YYYYMMDD。STUFFは、最初の4文字を現在の年に置き換えます。YEAR()は数値を返しますが、STUFFのコンテキストでは、varcharとして自動的にキャストされます。

于 2012-11-02T19:29:16.037 に答える
2

最初の方法は使用しないでください。信頼性の低い結果が生じる可能性があります。

2012年1月2日は、設定に応じて2月1日または1月2日と解釈できます。

特に日付の場合は、文字列を避けてください。

2番目の方法ははるかに信頼性があります

于 2012-11-02T19:23:38.297 に答える