Jai*_*hai 20 sql sql-server date calculated-columns sql-server-2008
DATEFROMPARTS(year, month, day)SQL Server 2008中有类似的东西吗?我想用当前的年份和月份创建一个日期,但是我这个月的一天.这需要在一行中完成,以便在计算列公式中使用.
例如(我不确定它是否有效,因为我没有SQL Server 2012):
DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 3)
Run Code Online (Sandbox Code Playgroud)
有没有办法在SQL Server 2008中执行此操作?
DATEFROMPARTS似乎仅在SQL Server 2012中可用(链接)
Ken*_*rds 24
你可以使用这样的东西来制作你自己的日期时间:
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)
Run Code Online (Sandbox Code Playgroud)
Joe*_*orn 21
使用3您的示例,您可以这样做:
dateadd(dd, 3 -1, dateadd(mm, datediff(mm,0, current_timestamp), 0))
Run Code Online (Sandbox Code Playgroud)
它的工作原理是查找自纪元日期以来的月数,将这些月份重新添加到纪元日期,然后将所需的天数添加到该先前结果中.这听起来很复杂,但它是基于在Date添加到Sql Server 2008 的(非DateTime)类型之前截断日期的规范方法.
你可能会在这里看到其他答案,建议建立日期字符串.我劝你避免这种技巧.使用字符串可能要慢得多,并且使用替代日期排序/格式存在一些潜在的缺陷.
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
Run Code Online (Sandbox Code Playgroud)