8

外部ソースから取得した Microsft SQL Server 2008 R2 にテーブルがあります。ID, Year, DAY, HOUR & Valueの列は次のとおりDAYですHOUR

新しい datetime 列を作成し、列のデータから作成された dateTime を入力したいと考えていYear, DAY & HOURます。

DateTimeそのパーツからを作成するには、どの SQL 関数を使用すればよいですか?

SQL Server 2012 にはがありますが、 SQL Server 2008 R2DATETIMEFROMPARTSには同等の機能はありません。

4

4 に答える 4

7
declare @Year int = 2003
declare @Day int = 100
declare @Hour int = 13

select dateadd(hour, @Hour, dateadd(dayofyear, @Day - 1, dateadd(year, @Year - 1900, 0)))
于 2013-04-30T11:32:36.027 に答える
3

私自身のためにそれを作成し、共有するのに適した場所になると考えました.Mikael Erikssonによるサンプルに基づいています.

CREATE FUNCTION [dbo].[DATETIME2FROMPARTS](
    @year int,
    @month int,
    @day int,
    @hour int,
    @minute int,
    @second int,
    @fractions int,
    @precision int)
RETURNS datetime2(7)
AS
BEGIN
    RETURN
        DATEADD(NANOSECOND, POWER(10, 9-@precision)*@fractions, 
        DATEADD(SECOND, @second, 
        DATEADD(MINUTE, @minute, 
        DATEADD(HOUR, @hour, 
        DATEADD(DAY, @day-1, 
        DATEADD(MONTH, @month-1, 
        DATEADD(YEAR, @year-1900, 
        CAST(CAST(0 AS datetime) AS datetime2(7)))))))));
END
于 2013-10-08T00:29:48.120 に答える
0

別の解決策は次のとおりです。

create table yourtable (yr int, dy int, hr int);
insert into yourtable values (2013,100,5);
insert into yourtable values (2013,1,1);

select dateadd(hour,hr,dateadd(month, (yr - 1900) * 12 , dy - 1))
from yourtable

概念は、年を (年 - 1900) * 12 として月として使用し、日数で始まる日付に時間を追加することです。

于 2013-04-30T11:37:26.837 に答える