将文本字段转换为访问查询中的日期/时间字段不起作用

时间:2018-04-26 07:34:41

标签: sql ms-access vb6

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

  • 格式(InvoiceDate," yyyy / mm / dd")
  • (DateSerial(左(InvoiceDate,4),MID(InvoiceDate,5,2),右(InvoiceDate,2))   在#2015/01/01#和#2016/01/01#)之间
  • DateValue(InvoiceDate," yyyy / mm / dd")
  • CDate(InvoiceDate," yyyy / mm / dd")

但这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:AM和2016/01/20 08:25 PM

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

Following two types are include in my InvoiceDate Field

请帮忙。 谢谢。

1 个答案:

答案 0 :(得分:4)

您的标准:

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

是正确的,因此错误消息表明, InvoiceDate 中的一个或多个文本日期不代表有效日期,例如2015-06-31或Null。

运行查询以检查:

Select *, IsDate(InvoiceDate) As ValidDate From Invoice

并查看 ValidDate 的任何值是否为False。

忽略额外冒号:

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