我建议有一个表(设计还没有确定,可以根据回答这个问题所表达的观点而改变),这个表有一个int类型的主键(使用自动增量)和一个字段(类型为Nchar的ReturnPeriod),其中包含'06 2013'形式的数据(在本例中代表2013年6月)。
我只想返回06或者在表格中输入的最后一条记录中发生的任何事情。这个表每年不会超过4个记录(所以它永远不会那么大)。它还有一列指示最后一个条目的创建日期。
我觉得这个列至少是最适合获取最后一条记录的候选者,所以基本上我想知道sql是否有一个内置函数来比较查询运行的日期到最近的匹配一列,并返回一个字段的前两个字符。
到目前为止,我有:
Select Mid(ReturnPeriod,1,2) from Returns
Where DateReturnEntered = <and this is where I'm stuck>
我正在寻找的是一个where子句,它将使用运行查询的日期作为其参考点来获取最后输入的记录(Date类型的DateRetunEntered包含输入记录的日期)。
当然,可能有一种更简单的方法来保证一个人拥有最后一条记录,在这种情况下,我愿意接受建议。
由于
答案 0 :(得分:0)
我会将您的ReturnPeriod
存储为date
数据类型,使用该月的名义上的第1个,例如2013年6月1日,如果您没有实际日期。
这将允许与您输入的日期进行直接比较,如果需要,可以使用返回值的简单格式。
您的查询将在您输入日期之前找到最新日期。
SELECT MONTH(MAX(ReturnPeriod)) AS ReturnMonth
FROM Returns
WHERE ReturnPeriod <= @DateReturnEntered
答案 1 :(得分:0)
我认为您应该将ReturnPeriod
作为日期时间存储,例如不是06 2013
作为VARCHAR而是01.06.2013
作为DATETIME(2013年6月1日的第一天)。
在这种情况下,如果我的问题正确,您可以使用GETDATE()获取当前时间:
SELECT TOP 1 MONTH(ReturnPeriod)
FROM Returns
WHERE DateReturnEntered<=GETDATE()
ORDER BY DateReturnEntered DESC
如果您将ReturnPeriod
存储为varchar
,那么
SELECT TOP 1 LEFT(ReturnPeriod,2)
FROM Returns
WHERE DateReturnEntered<=GETDATE()
ORDER BY DateReturnEntered DESC