我需要编写一个存储过程来允许某人搜索数据库。但是,我得到的只是一个月和一年的整数。 db有月份和年份字段。但我无法弄清楚如何设置比较。
Ex:我得到2008年3月和2010年6月。
我需要在数据库中搜索记录,其中由月份和年份字段指定的日期介于两个日期之间。
修改
给定两个Date
输入,如何找到这些日期之间的所有记录?每条记录只有表示年份和月份的整数。
答案 0 :(得分:5)
以前的解决方案应该可行,但不幸的是它们会阻止在年份和月份列上使用索引。
你可能必须以艰难的方式解决它:
SELECT *
FROM records
WHERE Year > @StartYear
OR ( Year = @StartYear
AND Month >= @StartMonth)
/*(ommited end date check, it is same)*/
另一种可能性是将计算日期列添加到源表
以这种方式存储日期是可疑的,从DB设计的角度来看可能不正确。考虑将日期存储在日期列中(如果确实需要),添加年和月的计算列。
答案 1 :(得分:1)
假设在SQL Server中提供了名为@StartDate和@EndDate的日期变量:
SELECT
*
FROM
MyTable
WHERE
-- yields "200901 between 200801 and 201104" on inputs 01-01-2008, 04-01-2011
Convert(VarChar(10), MyTable.Year) + Replace(Str(MyTable.Month, 2), ' ', '0')
BETWEEN
Convert(VarChar(10), YEAR(@StartDate)) + Replace(Str(MONTH(@StartDate), 2), ' ', '0')
AND
Convert(VarChar(10), YEAR(@EndDate)) + Replace(Str(MONTH(@EndDate), 2), ' ', '0')
<强>参考强>
Replace(Str(MyTable.Month, 2), ' ' , '0')
答案 2 :(得分:0)
非常规方法:
select * from sometable
where YourYear * 100 + YourMonth
between @SomeStartYear * 100 + @SomeStartMonth and @SomeendYear * 100 + @SomeEndMonth