variable poner fecha convert como armar sql sql-server sql-server-2008 date calculated-columns

poner - Creando fecha en SQL Server 2008



time sql (3)

Puedes usar algo como esto para crear tu propia fecha y hora:

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)

¿Hay algo similar a DATEFROMPARTS(year, month, day) en SQL Server 2008? Quiero crear una fecha usando el año y el mes actual, pero mi propio día del mes. Esto debe hacerse en una línea para que se utilice en una fórmula de columna calculada.

Por ejemplo (no estoy seguro de si funciona porque no tengo SQL Server 2012):

DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 3)

¿Hay alguna manera de hacer esto en SQL Server 2008?

DATEFROMPARTS parece estar disponible solo en SQL Server 2012 (link)


Usando el 3 de tu ejemplo, podrías hacer esto:

dateadd(dd, 3 -1, dateadd(mm, datediff(mm,0, current_timestamp), 0))

Funciona encontrando el número de meses desde la fecha de la época, agregando esos meses a la fecha de la época y luego agregando la cantidad deseada de días a ese resultado anterior. Suena complicado, pero está basado en la forma canónica de truncar fechas antes del tipo de Date (no DateTime) agregado a Sql Server 2008.

Probablemente vas a ver otras respuestas aquí que sugieren la construcción de cadenas de fecha. Te insto a que evites esa técnica. Es probable que el uso de cadenas sea mucho más lento, y existen algunos escollos potenciales con intercalaciones / formatos de fecha alternativos.


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