Index: django/db/models/fields/__init__.py
===================================================================
--- django/db/models/fields/__init__.py	(revision 5780)
+++ django/db/models/fields/__init__.py	(working copy)
@@ -219,7 +219,7 @@
                 value = int(value)
             except ValueError:
                 raise ValueError("The __year lookup type requires an integer argument")
-            return ['%s-01-01 00:00:00' % value, '%s-12-31 23:59:59.999999' % value]
+            return ['%s-01-01' % value, '%s-1-1' % (value + 1)]
         raise TypeError("Field has invalid lookup: %s" % lookup_type)
 
     def has_default(self):
Index: django/db/backends/sqlite3/base.py
===================================================================
--- django/db/backends/sqlite3/base.py	(revision 5780)
+++ django/db/backends/sqlite3/base.py	(working copy)
@@ -233,4 +233,3 @@
     'istartswith': "LIKE %s ESCAPE '\\'",
     'iendswith': "LIKE %s ESCAPE '\\'",
 }
-
Index: tests/regressiontests/datatypes/models.py
===================================================================
--- tests/regressiontests/datatypes/models.py	(revision 5780)
+++ tests/regressiontests/datatypes/models.py	(working copy)
@@ -56,4 +56,30 @@
 datetime.time(5, 30)
 >>> d3.consumed_at
 datetime.datetime(2007, 4, 20, 16, 19, 59)
+
+# SQLite date bug -- ref #3689
+# cleanup
+>>> d.delete()
+>>> d2.delete()
+>>> d3.delete()
+
+>>> d = Donut(name='Date Test 2007', baked_date=datetime.datetime(year=2007, month=12, day=31), consumed_at=datetime.datetime(year=2007, month=12, day=31, hour=23, minute=59, second=59))
+>>> d.save()
+>>> d1 = Donut(name='Date Test 2006', baked_date=datetime.datetime(year=2006, month=1, day=1), consumed_at=datetime.datetime(year=2006, month=1, day=1))
+>>> d1.save()
+
+>>> Donut.objects.get(baked_date__year=2007)
+<Donut: Date Test 2007>
+
+>>> Donut.objects.get(baked_date__year=2006)
+<Donut: Date Test 2006>
+
+>>> Donut.objects.get(consumed_at__year=2007)
+<Donut: Date Test 2007>
+
+>>> Donut.objects.get(consumed_at__year=2006)
+<Donut: Date Test 2006>
+
+>>> d.delete()
+>>> d1.delete()
 """}
