正如其他人所说,创建一个计算列将是一个更好的选择。完全避免这种做法会更好。但是,如果不能避免这种方法,这里是您可以使用的计算列表达式。在输出部分,你可以注意到,在本月和分钟无效值实际上加起来,显示在未来
计算列表达式正确的日期:
(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
SQL = SQL Server? SQL实际上只是**结构化查询语言** - 不是数据库产品... – 2012-04-27 19:30:38