Создание даты в SQL Server 2008
есть что-то похожее на DATEFROMPARTS(year, month, day)
в SQL Server 2008? Я хочу создать дату, используя текущий год и месяц, но мой собственный день месяца. Это необходимо сделать в одной строке для использования в Формуле вычисляемого столбца.
например (я не уверен, работает ли он, потому что у меня нет SQL Server 2012):
DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 3)
есть ли способ сделать это в SQL Server 2008?
DATEFROMPARTS кажется доступным только в SQL Server 2012 (ссылка)
3 ответов
С помощью 3
из вашего примера вы можете сделать следующее:
dateadd(dd, 3 -1, dateadd(mm, datediff(mm,0, current_timestamp), 0))
он работает, находя количество месяцев с даты эпохи, добавляя эти месяцы обратно к дате эпохи, а затем добавляя желаемое количество дней к этому предыдущему результату. Это звучит сложно, но он построен на том, что было каноническим способом усечения дат до Date
(не DateTime) тип добавлен в Sql Server 2008.
вы, вероятно, увидите другие ответы здесь, предлагая построение строк даты. Я призываю вас избегать этой техники. Использование строк, вероятно, будет много медленнее, и есть некоторые потенциальные подводные камни с альтернативными сопоставлениями/форматами дат.
вы можете использовать что-то вроде этого, чтобы сделать свой собственный datetime:
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)
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