我在SQL脚本中有以下整数类型值:@year
,@month
,@day
。现在我想将它们转换为日期时间值。应该很容易,对吧?
好吧,我刚刚浏览了SQL文档,并且非常惊讶于我找不到任何方法来执行此操作,除了转换为字符串然后转换为日期时间。
declare @dt datetime
set @dt= convert(varchar,@year)+'/'+convert(varchar,@month)+'/'+convert(varchar,@day)
这是可怕的!当然必须有一种方法可以直接从int值转换为datetime?
答案 0 :(得分:1)
不是开箱即用的,但您可以创建一个执行此操作的UDF,例如:
create function ints2date (@year int, @month int, @day int)
returns datetime
as begin
declare @foo varchar (10)
set @foo = convert (varchar, @year) + '-' +
convert (varchar, @month) + '-' +
convert (varchar, @day)
return convert (datetime, @foo)
end
go
select dbo.ints2date (2000,1,1)
您还可以使用dateadd / datepart以更复杂的方式(但可能稍微更快)完成此操作。可以在Create a date with T-SQL(stackoverflow.com)找到此示例。
答案 1 :(得分:1)
您可以在不转换为此类字符串的情况下执行此操作。它不是一个单一的功能,它会很好,但它可以工作:
DECLARE
@year SMALLINT,
@month TINYINT,
@day TINYINT,
@d DATETIME
SET @year = 2010
SET @month = 6
SET @day = 23
SET @d = '1900-01-01'
SELECT
DATEADD(dy, @day - 1, DATEADD(mm, @month - 1, DATEADD(yy, @year - 1900, @d)))
答案 2 :(得分:0)
另一种快捷方法
DECLARE
@year SMALLINT,
@month TINYINT,
@day TINYINT,
@d DATETIME
SET @year = 2010
SET @month = 6
SET @day = 23
SELECT cast(cast(@year*10000+@month*100+@day as char(8)) as datetime)
SELECT cast(ltrim(@year*10000+@month*100+@day) as datetime)