正如其他人提到的,创建计算列将是更好的选择。完全避免这种方法会更好。但是,如果无法避免这种方法,这里是您可以使用的计算列表达式。在输出部分中,您可以注意到,月份和分钟中的无效值实际上加起来以显示将来的正确日期
计算列表达式:
(dateadd(year, (100) + [year],
dateadd(month, [month] - (1),
dateadd(day, [day] - (1),
dateadd(hour, [hour],
dateadd(minute, [min], (0))
)
)
)
)
)
示例脚本:
CREATE TABLE dbo.myTable
(
[year] int NOT NULL
, [month] int NOT NULL
, [day] int NOT NULL
, [hour] int NOT NULL
, [min] int NOT NULL
, [smalldatetime] AS (dateadd(year,(100)+[year],dateadd(month,[month]-(1),dateadd(day,[day]-(1),dateadd(hour,[hour],dateadd(minute,[min],(0))))))) PERSISTED
);
INSERT INTO dbo.myTable ([year], [month], [day], [hour], [min]) VALUES
(12, 4, 27, 17, 34),
(12, 6, 12, 4, 8),
(11, 32, 12, 54, 87);
SELECT [year]
, [month]
, [day]
, [hour]
, [min]
, [smalldatetime]
FROM dbo.myTable;
样本输出:
year month day hour min smalldatetime
---- ----- --- ---- --- -----------------------
12 4 27 17 34 2012-04-27 17:34:00.000
12 6 -12 4 8 2012-05-19 04:08:00.000
11 32 12 54 87 2013-08-14 07:27:00.000