在SQL Server 2008中创建日期

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)类型之前截断日期的规范方法.

你可能会在这里看到其他答案,建议建立日期字符串.我劝你避免这种技巧.使用字符串可能慢得多,并且使用替代日期排序/格式存在一些潜在的缺陷.


Ale*_*roR 5

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)