Bizare date field behavior in an Oracle database.
I have this bizare data problem quering an oracle date field.
Look at these two result sets.
Missing Two records.:
| COUNTY_CD | CONAME | FILE_DATE | TRANSMISSIONS | RECORDS | NO_ERROR_RECORDS | ERROR_RECORDS | TOTAL_ERRORS | |
| 03 | AMADOR | 07-NOV-11 | 10 | 405 | 396 | 9 | 9 | |
| 10 | FRESNO | 07-NOV-11 | 1 | 204 | 200 | 4 | 4 | |
| 16 | KINGS | 07-NOV-11 | 3 | 1296 | 1110 | 186 | 194 | |
| 20 | MADERA | 07-NOV-11 | 1 | 552 | 535 | 17 | 17 | |
| 51 | SUTTER | 07-NOV-11 | 1 | 43 | 5 | 38 | 38 |
WHERE
r.file_date BETWEEN TO_DATE('2011-11-07 00:00:00','YYYY-MM-DD HH24:MI:SS')
AND TO_DATE('2011-11-07 15:00:00','YYYY-MM-DD HH24:MI:SS')
All Expected records
| COUNTY_CD | CONAME | FILE_DATE | TRANSMISSIONS | RECORDS | NO_ERROR_RECORDS | ERROR_RECORDS | TOTAL_RECORDS | |
| 03 | AMADOR | 07-NOV-11 | 10 | 405 | 396 | 9 | 9 | |
| 10 | FRESNO | 07-NOV-11 | 1 | 204 | 200 | 4 | 4 | |
| 16 | KINGS | 07-NOV-11 | 3 | 1296 | 1110 | 186 | 194 | |
| 20 | MADERA | 07-NOV-11 | 1 | 552 | 535 | 17 | 17 | |
| 50 | STANISLAUS | 07-NOV-11 | 2 | 17002 | 7165 | 9837 | 10028 | |
| 51 | SUTTER | 07-NOV-11 | 1 | 43 | 5 | 38 | 38 |
WHERE
r.file_date BETWEEN TO_DATE('2011-11-07 00:00:00','YYYY-MM-DD HH24:MI:SS')
AND TO_DATE('2011-11-07 15:59:59','YYYY-MM-DD HH24:MI:SS')
Can anybody tell me why looking for recrods by the FILE_DATE field that has no time portion, it is a 'DATE' data type field, would produce different results based on different time parameters passed into the WHERE clause? This has me really confused and I just can not figure out why this behavior changes which makes me leary to trust a work around solution of just apending random time data to the where clause.
Below it the entire SQL query from the origanal source.
SELECT
r.county_cd,
c.coname,
COUNT(unique r.file_name) AS transmissions,
count(r.use_no) AS records,
count(r.use_no) - count(e.use_no) AS no_error_records,
count(e.use_no) AS error_records,
sum(e.errors) AS total_errors
FROM
raw_pur r INNER JOIN
pur_lookup l
ON (r.use_no = l.use_no AND r.year = l.seq_year) LEFT OUTER JOIN
(
SELECT
year,
use_no,
count(use_no) AS errors
FROM
errors
WHERE
NOT (error_code = 17 OR error_code = 20 OR error_code = 72 OR error_code = 52 OR
(error_code = 12 AND error_type = 'POSSIBLE') OR
(error_code = 69 AND error_type = 'POSSIBLE') OR
(error_code = 37 AND error_type = 'POSSIBLE') OR
(error_code = 39 AND error_type = 'POSSIBLE'))
GROUP BY
year,
use_no
) e ON (r.year = e.year AND r.use_no = e.use_no) INNER JOIN
county c
ON (r.county_cd = c.county_cd)
WHERE
r.file_date BETWEEN <cfqueryparam value="#form.fromDate#" cfsqltype="cf_sql_date">
AND <cfqueryparam value="#form.toDate#" cfsqltype="cf_sql_date">
GROUP BY
r.county_cd,
c.coname
ORDER BY
r.county_cd
