短文本数据类型字段中的日期...选择查询故障

时间:2013-02-22 00:43:55

标签: sql database date ms-access

在我的Access数据库中,我有一个名为customers的表。在此表中,我有一个名为DateEntered的列。该字段的数据类型为短文

此列中的值不一致 - 它们有多种变体:

  • MM-DD-YYYY
  • MMDDYYYY
  • MM/DD/YYYY

似乎没有任何标准设置。

我的目标是从2012年开始选择所有客户。我试过

select *
from customers
where DateEntered <('%2013') AND >('%2012');

但是当我运行它时它会出现空白。

任何人都能指出我未能正确做到的事情吗?更重要的是解释为什么这个查询在Access中不起作用?从我对SQL的理解(不是非常先进),这应该工作。

3 个答案:

答案 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可以成为你的朋友。

如果您有时间和耐心,修复数据和代码是更好的方法,但有时这并不总是可行。