在我的表中,我有一个月(tinyint)和一天(tinyint)字段。我希望有一个功能,可以在这个月和日期生成这个月和日的下一个日期(包括年份)的日期时间。
因此,如果我有月= 9,日= 7它将产生9/7/2009。
如果我有第1个月,第1天将产生1/1/2010。
答案 0 :(得分:2)
declare @month tinyint
declare @day tinyint
set @month = 9
set @day = 1
declare @date datetime
-- this could be inlined if desired
set @date = convert(char(4),year(getdate()))+'0101'
set @date = dateadd(month,@month-1,@date)
set @date = dateadd(day,@day-1,@date)
if @date <= getdate()-1
set @date = dateadd(year,1,@date)
select @date
或者,要以YYYYMMDD格式创建字符串:
set @date =
right('0000'+convert(char(4),year(getdate())),4)
+ right('00'+convert(char(2),@month),2)
+ right('00'+convert(char(2),@day),2)
另一种避免文字的方法:
declare @month tinyint
declare @day tinyint
set @month = 6
set @day = 24
declare @date datetime
declare @today datetime
-- get todays date, stripping out the hours and minutes
-- and save the value for later
set @date = floor(convert(float,getdate()))
set @today = @date
-- add the appropriate number of months and days
set @date = dateadd(month,@month-month(@date),@date)
set @date = dateadd(day,@day-day(@date),@date)
-- increment year by 1 if necessary
if @date < @today set @date = dateadd(year,1,@date)
select @date
答案 1 :(得分:1)
到目前为止,这是我的sql示例。我不是很喜欢它......
DECLARE @month tinyint,
@day tinyint,
@date datetime
SET @month = 1
SET @day = 1
-- SET DATE TO DATE WITH CURRENT YEAR
SET @date = CONVERT(datetime, CONVERT(varchar,@month) + '/' + CONVERT(varchar,@day) + '/' + CONVERT(varchar,YEAR(GETDATE())))
-- IF DATE IS BEFORE TODAY, ADD ANOTHER YEAR
IF (DATEDIFF(DAY, GETDATE(), @date) < 0)
BEGIN
SET @date = DATEADD(YEAR, 1, @date)
END
SELECT @date
答案 2 :(得分:1)
这是PostgreSQL的解决方案
your_date_calculated = Year * 10000 + Month * 100 + Day
给你一个像20090623的日期。
select cast( cast( your_date_calculated as varchar ) as date ) + 1
答案 3 :(得分:1)
这是我的版本。它的核心只有两行,使用DATEADD
函数,它不需要转换到字符串,浮点数或其他任何东西:
DECLARE @Month TINYINT
DECLARE @Day TINYINT
SET @Month = 9
SET @Day = 7
DECLARE @Result DATETIME
SET @Result =
DATEADD(month, ((YEAR(GETDATE()) - 1900) * 12) + @Month - 1, @Day - 1)
IF (@Result < GETDATE())
SET @Result = DATEADD(year, 1, @Result)
SELECT @Result