我有一个表格,其中包括Season和Academic_Year列。 Academic_Year是int类型。季节可以是春季,夏季或秋季。
我需要在getdate()在赛季开始之前和之后的天数之间选择行,伪代码
WHERE
( getdate() > 31/3/16 AND getdate() < 31/9/16 AND Season = 'Autumn' AND Academic_Year = 2016 )
OR ( getdate() > 31/9/16 AND getdate() < 31/1/17 AND Season = 'Spring' AND Academic_Year = 2016 )
OR ( getdate() > 31/12/16 AND getdate() < 31/4/17 AND Season = 'Summer' AND Academic_Year = 2016 )
我的问题是创建与getdate()进行比较的日期。我需要结合一个字符串 - &#39; 31/3 /&#39; - 使用int - Academic_Year,并创建日期。
解决方案不需要高效,但它确实需要在2008及更高版本的sql server版本上运行。
答案 0 :(得分:0)
如果您只是连接varchar
并告诉它转换为date
,SQL将允许此转换。例如:
declare @year int = 2016
declare @date varchar(10) = '3/31'
select cast(@date + '/' + cast(@year as varchar(4)) as date)
您必须将integer
年投放到varchar
以将其与其他varchar
相结合,但您可以将整个事项投射到date
(或{ {1}})一旦你有一个公认的日期格式。
答案 1 :(得分:0)
您可以通过使用字符串和年份的串联来形成日期。
datetime
获得日期字符串后,您可以使用日期函数在必要时进一步操作它。
答案 2 :(得分:0)
WHERE (GETDATE() > CONVERT(VARCHAR(4),Academic_Year) + '-03-31'
AND GETDATE() < CONVERT(VARCHAR(4),Academic_Year) + '-09-30'
AND Season = 'Autumn') etc
为我工作。诀窍是添加'-03-31'而不是'31 -03-'。谢谢@kicken