web-dev-qa-db-ja.com

SQL Server 2008で日付を作成する

SQL Server 2008にDATEFROMPARTS(year, month, day)に似たものはありますか?現在の年と月を使用して日付を作成したいが、自分の日付を作成したい。これは、計算列式で使用するために1行で実行する必要があります。

例(SQL Server 2012がないために動作するかどうかわかりません):

DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 3)

SQL Server 2008でこれを行う方法はありますか?

DATEFROMPARTS SQL Server 2012でのみ使用可能です (link)

19
Jaiesh_bhai

3あなたの例から、これを行うことができます:

dateadd(dd, 3 -1, dateadd(mm, datediff(mm,0, current_timestamp), 0))

これは、エポック日付からの月数を検索し、それらの月をエポック日付に追加し、その前の結果に希望の日数を追加することにより機能します。複雑に聞こえますが、SQL Server 2008に追加されたDate(DateTimeではありません)型の前に日付を切り捨てる標準的な方法で構築されています。

おそらく、日付文字列の作成を提案する他の回答が表示されるでしょう。私はそのテクニックを避けることをお勧めします。文字列の使用はmuchより遅くなる可能性が高く、代替の日付の照合/形式には潜在的な落とし穴がいくつかあります。

20
Joel Coehoorn

次のようなものを使用して、独自の日時を作成できます。

DECLARE @year INT = 2012
DECLARE @month INT = 12
DECLARE @day INT = 25

SELECT CAST(CONVERT(VARCHAR, @year) + '-' + CONVERT(VARCHAR, @month) + '-' + CONVERT(VARCHAR, @day)
 AS DATETIME)
23
Ken Richards
CREATE FUNCTION  DATEFROMPARTS
(
    @year int,
    @month int,
    @day int
)
RETURNS datetime
AS
BEGIN

     declare @d datetime

     select @d =    CAST(CONVERT(VARCHAR, @year) + '-' + CONVERT(VARCHAR, @month) + '-' + CONVERT(VARCHAR, @day) AS DATETIME)
    RETURN  @d 

END
GO
4
AlejandroR