将文本字段转换为访问查询中的 date/time 字段不起作用
convert text field to a date/time field in access query not working
我正在使用访问数据库和 vb6。我的 table 有一个名为 "InvoiceDate" 的字段,它是一个文本字段。我不允许进行数据库修改。所以我想我唯一的选择是在我的查询中将文本字段更改为 date/time 字段。我找到了几种方法来做到这一点。它们如下。
- 格式(发票日期,"yyyy/mm/dd")
- (DateSerial(左(InvoiceDate,4),Mid(InvoiceDate,5,2),Right(InvoiceDate,2))
在#2015/01/01# 和#2016/01/01#之间))
- DateValue(InvoiceDate, "yyyy/mm/dd")
- CDate(发票日期, "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;
这给了我错误 "Data Type mismatch in criteria expression"
我的 InvoiceDate 字段中包含以下两种类型
2016/01/04 10:00:上午和 2016/01/20 08:25 下午
唯一不同的是时间后面的冒号
请帮忙。
谢谢。
您的标准:
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#
我正在使用访问数据库和 vb6。我的 table 有一个名为 "InvoiceDate" 的字段,它是一个文本字段。我不允许进行数据库修改。所以我想我唯一的选择是在我的查询中将文本字段更改为 date/time 字段。我找到了几种方法来做到这一点。它们如下。
- 格式(发票日期,"yyyy/mm/dd")
- (DateSerial(左(InvoiceDate,4),Mid(InvoiceDate,5,2),Right(InvoiceDate,2)) 在#2015/01/01# 和#2016/01/01#之间))
- DateValue(InvoiceDate, "yyyy/mm/dd")
- CDate(发票日期, "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;
这给了我错误 "Data Type mismatch in criteria expression"
我的 InvoiceDate 字段中包含以下两种类型
2016/01/04 10:00:上午和 2016/01/20 08:25 下午
唯一不同的是时间后面的冒号
请帮忙。 谢谢。
您的标准:
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#