【发布时间】:2019-05-22 18:04:48
【问题描述】:
我的 Access 数据库中有一个查询,它需要 2 个用户输入的年龄并返回这些输入之间的数据库条目。当您输入一个最小值为 >=1 的范围时,它工作正常,但如果最小值为
最初我认为这可能与我计算年龄的方式有关(我在查询中即时执行此操作)所以我尝试了使用和不使用 datediff 函数: (日期()-[出生日期])/365.25 和 年龄:(DateDiff("y",[DOB],Date()))/365.25 但这些都对结果没有任何影响。它与年龄计算有关还是介于...和运算符之间有什么不工作?
这部分查询的完整SQL代码为:
DateDiff("y",[DOB],Date()))/365.25) Between [Forms]![AgeRangeQueryForm]![Youngest Age in Range] And [Forms]![AgeRangeQueryForm]![Oldest Age In Range]
整个查询的代码是(包括 Gustav 建议的编辑):
PARAMETERS [Forms]![AgeRangeQueryForm]![Youngest Age in Range] Short, [Forms]![AgeRangeQueryForm]![Oldest Age in Range] Short, [Forms]![AgeRangeQueryForm]![GenderOptionGroup] Short, [Forms]![AgeRangeQueryForm]![PostcodeSearch] Short;
SELECT [Carer Contact Details_1].[Parents Name], [Carer Contact Details_1].[Parents Surname], [Carer Contact Details_1].[Email Address], [Carer Contact Details_1].[Contact Number], [Carer Contact Details_1].Postcode, [Child Details1].[First Name], UCase(Left(Nz([Child Details1].[Gender],""),1)) AS Gender, Round((DateDiff("d",[DOB],Date())/365.25),2) AS Age, [Child Details1].DOB, [Child Details1].[Date of Last Test]
FROM [Carer Contact Details_1] INNER JOIN [Child Details1] ON [Carer Contact Details_1].[Parent ID] = [Child Details1].[Parent ID]
WHERE (((UCase(Left(Nz([Child Details1].[Gender],""),1))) Like Choose([Forms]![AgeRangeQueryForm]![GenderOptionGroup],"M","F","[MF]")) AND ((Round((DateDiff("d",[DOB],Date())/365.25),2)) Between [Forms]![AgeRangeQueryForm]![Youngest Age in Range] And [Forms]![AgeRangeQueryForm]![Oldest Age In Range]) AND ((Left([Carer Contact Details_1]![Postcode],Len(Nz([Forms]![AgeRangeQueryForm]![PostcodeSearch]))))=Nz([Forms]![AgeRangeQueryForm]![PostcodeSearch])));
显然,我的预期结果是它能够处理小于 1 的值,即可以搜索和查找 0.1 - 0.9 之间的值。目前,它返回空白。
我对 Access 和 SQL 都很陌生,因此如果我缺少明显的解决方案,我深表歉意。
提前致谢。
编辑:我想我会更新这个,因为我仍然有这个问题。我已经尝试了下面列出的两个建议(Gustav 和 SunKnight0),但都没有奏效。它仍然不会返回小于 1 岁的任何内容(有趣的是,如果我将查询的 Age 部分设置为以天为单位返回年龄,那么它不会返回小于 525 天的任何内容)。我认为这可能是由于我的搜索表单的“性别”字段中缺少值,因为它没有返回任何在该字段中没有条目的条目(无论年龄)。考虑到这一点,我添加了这一行:
((UCase(Left(Nz([Child Details1].[Gender],""),1)))
到我选择指定性别的查询部分。我已经更新了上面的整个查询,所以它反映了我最近的尝试。
我现在完全被难住了,为什么它不会返回任何东西。这与我用来计算年龄的函数有关吗? DateDiff 会自动舍入吗?
【问题讨论】:
标签: ms-access