首页 > 解决方案 > 在访问查询中将文本字段转换为日期/时间字段不起作用

问题描述

我正在使用访问数据库和 vb6。我的表有一个名为“InvoiceDate”的字段,它是一个文本字段。我不允许修改数据库。所以我想我唯一的选择是将文本字段更改为查询中的日期/时间字段。我找到了几种方法来做到这一点。它们如下。

但是这4种方法都不起作用。我想不通这个。

我正在使用的查询如下

SELECT Invoice.InvoiceDate, InvoicedProduct.InvoiceType, Invoice.InvoiceStatus, 
    Invoice.RetailerID, Invoice.DailySalesID, Invoice.RepID, 
    InvoicedProduct.Quantity, InvoicedProduct.UnitRate, 
    InvoicedProduct.TotalItemValue 
FROM Invoice 
INNER JOIN InvoicedProduct 
ON (Invoice.DailySalesID = InvoicedProduct.DailySalesID) 
    AND (Invoice.RepID = InvoicedProduct.RepID) 
    AND (Invoice.InvoiceID = InvoicedProduct.InvoiceID) 
WHERE (((InvoicedProduct.ProductID)='9010001174130.4') 
    AND (DateValue(Invoice.InvoiceDate) Between #2015/01/01# And #2016/01/01#)) 
GROUP BY Invoice.InvoiceDate, InvoicedProduct.InvoiceType, Invoice.InvoiceStatus, 
    Invoice.RetailerID, Invoice.DailySalesID, Invoice.RepID, 
    InvoicedProduct.Quantity, InvoicedProduct.UnitRate, 
    InvoicedProduct.TotalItemValue 
HAVING (((InvoicedProduct.InvoiceType)='Invoice' OR (InvoicedProduct.InvoiceType)='Sound') 
    AND ((Invoice.InvoiceStatus)='VALID')) 
ORDER BY Invoice.InvoiceDate;

这给了我错误“标准表达式中的数据类型不匹配”

我的 InvoiceDate 字段中包含以下两种类型

2016/01/04 10:00:上午和 2016/01/20 08:25 PM

唯一的区别是时间后面的冒号

我的 InvoiceDate 字段中包含以下两种类型

请帮忙。谢谢你。

标签: sqlms-accessvb6

解决方案


Your criteria:

DateValue(Invoice.InvoiceDate) Between #2015/01/01# And #2016/01/01#

is correct, so the error message indicates, that one or more of your text dates in InvoiceDate don't represent a valid date, like 2015-06-31 or Null.

Run a query to check this:

Select *, IsDate(InvoiceDate) As ValidDate From Invoice

and see if any of the values of ValidDate are False.

To ignore the extra colon:

DateValue(Replace(Invoice.InvoiceDate, ": ", " ")) Between #2015/01/01# And #2016/01/01#

推荐阅读