在我的Access数据库中,我有一个名为customers
的表。在此表中,我有一个名为DateEntered
的列。该字段的数据类型为短文。
此列中的值不一致 - 它们有多种变体:
MM-DD-YYYY
,MMDDYYYY
和MM/DD/YYYY
。似乎没有任何标准设置。
我的目标是从2012年开始选择所有客户。我试过
select *
from customers
where DateEntered <('%2013') AND >('%2012');
但是当我运行它时它会出现空白。
任何人都能指出我未能正确做到的事情吗?更重要的是解释为什么这个查询在Access中不起作用?从我对SQL的理解(不是非常先进),这应该工作。
答案 0 :(得分:2)
另一种变体)
select * from customers where RIGHT(DateEntered, 4) = '2012'
答案 1 :(得分:1)
为什么不使用LIKE
运算符(当您使用%
和_
模式时,它们是合适的:
select * from customers where DateEntered like '%2013' or DateEntered like '%2012'
答案 2 :(得分:1)
如果您可以控制数据库和应用程序代码,处理此问题的最佳方法是使用实际的Date字段而不是表中的文本。
处理此问题的一种方法是向表中添加新字段,编写一两个查询以正确地将文本值转换为实际日期值,并填充新字段。 此时,您需要以任何方式搜索引用此字段的应用程序代码,并进行调整以将该字段视为日期而不是文本。这包括您的插入和更新语句,报告代码等。
最后,作为最后一步,我将重命名原始文本字段(或完全删除它),并将新日期字段重命名为原始字段名称。 一旦解决了问题,查询该字段将是一件小事。
或者,如果您无法更改表格和源代码,则可以使用日期conversion function CDATE()将文本值转换为实际日期。请注意,您可能需要防止非日期条目(NULL或空字符串值,以及首先不是真正日期的其他文本值)。 IsDate() function可以成为你的朋友。
如果您有时间和耐心,修复数据和代码是更好的方法,但有时这并不总是可行。