sql 日期比较查询

为什么:select 日期 from a where 日期>'2010年12月11日' and 日期 <'2011年9月20日' 成功!
select 日期 from a where 日期>'2010年12月11日' and 日期 <'2011年10月20日' 失败呢?
为什么:
select 日期 from a where 日期>'2010年12月11日' and 日期 <'2011年9月20日'
成功!
而:
select 日期 from a where 日期>'2010年12月11日' and 日期 <'2011年10月20日'
失败呢?
就多了一位月份就不行了……
--结果符合
--LZ应该是用的Sqlserver吧 我也用的Sqlserver
--你要的结果用T-Sql语句实现,希余蔽望对你有纳毁丛帮助
--生成测试数据
CREATE TABLE TestA
(
FName nvarchar(20),
FStartDate smalldatetime,
FEndDate smalldatetime,
FWorkYear int,
FJob nvarchar(20)
)
INSERT INTO TestA
SELECT '张三','2001-10-13','2004-10-13',3,'书记'
UNION ALL
SELECT '张三','2003-10-1','2004-11-13',1,'主任'
UNION ALL
SELECT '李四','2001-10-13','2004-10-13',3,'书记'
UNION ALL
SELECT '李四','2004-10-13','2007-10-13',3,'主任'

--第一个问题,连续任职2个条件:洞樱1,必须任职过2次以上岗位,也就是具有2条记录;2,任职总时间大于等于3年
SELECT FName,FWorkYear
FROM (
SELECT FName,SUM(DATEDIFF(m,FStartDate,FEndDate))/12 AS FWorkYear
FROM TestA
GROUP BY FName
HAVING COUNT(FName)>1
)AS T
WHERE FWorkYear >=3
--第二个问题,实现明细显示
--1.先创建自定义函数,返回每个人员任职明细字符串
ALTER FUNCTION dbo.GetAllJobDetail (@Name nvarchar(20)) RETURNS varchar(8000)
AS
BEGIN
DECLARE @Detail varchar(8000)
SET @Detail=''
SELECT @Detail = @Detail+' /'+CONVERT(varchar(10),FEndDate,121)+'至'+CONVERT(varchar(10),FStartDate,121)
+' 岗位:'+ CAST(FJob AS VARCHAR(10)) +' 时间:'+ CAST(FWorkYear AS VARCHAR(10)) +'年'
FROM TestA
WHERE FName=@Name
RETURN @Detail
END
--显示明细记录
SELECT FName,FWorkYear,dbo.GetAllJobDetail(FName)
FROM (
SELECT FName,SUM(DATEDIFF(m,FStartDate,FEndDate))/12 AS FWorkYear
FROM TestA
GROUP BY FName
HAVING COUNT(FName)>1
)AS T
WHERE FWorkYear >=3
--得到结果集,通过程序判断/ 实现界面显示的换行
用隐缺散or,这里用and的话灶氏,意思是要查的日期即要比12.11大,又要比10.20小,就像是要找一个即要比5大又要比3小的数,这样的数扮世是不存在 的
因为成功的是字符串比较而不是日期比较
建议看一下你的表,可能里面在3011年10月20日 这里的日期有问题,也许没有,也许有错。