【发布时间】:2015-08-28 10:09:45
【问题描述】:
我正在尝试查询 2 个不同的日期字段,并且一个日期字段 (datefield2) 具有空值。我的日期字段是 CCYYDDD,我通常按日期(数字(日期字段))将其转换为 mm/dd/yyyy 作为 NewDate。
这失败了
SELECT type, date(digits(datefield1)) AS DateEntered, coalesce(varchar(datefield2),'') as Renewed
FROM MYDATA
WHERE date(digits(datefeld1)) between '06/01/2015' and '6/30/2015' OR date(digits(coalesce(varchar(rendt7),''))) between '06/01/2015' and '06/30/2015'
以下成功
SELECT type, date(digits(datefield1)) AS DateEntered, coalesce(varchar(datefield2),'') as Renewed
FROM MYDATA
WHERE date(digits(datefeld1)) between '06/01/2015' and '6/30/2015' OR coalesce(varchar(rendt7),'') between '2015152' and '2015181
如何查询我的日期字段包含空值的位置?我计划为日期范围值传递参数,宁愿只传递 mm/dd/yyyy。
【问题讨论】:
-
1) 不要在任何非明确整数计数上使用
BETWEEN(根本)或任何其他包含上限(<=),因为您可能会得到错误的数据。从技术上讲,DATE数据类型并没有真正的格式(仅用于显示),但如果您使用正确的主机变量类型,这不是问题。在您的列上调用DATE(DIGITS(...))将使优化器忽略索引。但是,如果您将传入的主机变量转换为列类型,它可以使用索引(因为格式是可搜索的 - 尽管使用实际的日期类型更好)。