[
https://issues.apache.org/jira/browse/DERBY-2386?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12478275
]
Mayuresh Nirhali commented on DERBY-2386:
-----------------------------------------
The SQL_TSI_FRAC_SECOND type is used for fractional timestamp differences. IF
the expected difference is in seconds then SQL_TSI_SECOND should be used. This
is a solution to the error that is being reported in the description. So, I
think this is not a bug.
http://mail-archives.apache.org/mod_mbox/db-derby-dev/200511.mbox/[EMAIL
PROTECTED]
The discussion above on the derby-dev list on the same topic and that talks
about returning BIGINT instead of INT. I am inclined towards NOT doing that
because there is no gap between the values covered by TSI_FRAC_SECOND and
TSI_SECOND. I tried a small experiment as below,
<snip>
ij> select * from t2;
ID |STARTDATE |ENDDATE
-----------------------------------------------------------------
5 |2006-11-20 04:20:00.0 |2006-11-20 04:20:00.2
6 |2006-11-20 04:20:00.0 |2006-11-20 04:20:30.0
7 |2006-11-20 04:20:00.0 |2006-11-20 04:20:00.3
8 |2006-11-20 04:20:00.0 |2006-11-20 04:20:00.9999
4 rows selected
ij> select {fn timestampdiff(SQL_TSI_FRAC_SECOND, startdate, enddate)} as diff
from t2 where id =8;
DIFF
-----------
999900000
1 row selected
</snip>
So, for all values less than 1 second the function will not fail if FRAC_SECOND
is used and for values in seconds TSI_SECOND should be used.
The only downside of this existing approach is that for difference in seconds
(when TSI_SECOND is used) the fractional difference cannot be identified.
please share your thoughts.
> timestampdiff function fails when using SQL_TSI_FRAC_SECOND for datepart
> parameter, except for very small intervals
> -------------------------------------------------------------------------------------------------------------------
>
> Key: DERBY-2386
> URL: https://issues.apache.org/jira/browse/DERBY-2386
> Project: Derby
> Issue Type: Bug
> Components: SQL
> Affects Versions: 10.2.2.0
> Environment: SUSE Linux Enterprise Desktop 10
> Reporter: Don Smith
> Assigned To: Mayuresh Nirhali
>
> Using the timestampdiff function produces and integer overflow except for
> very small intervals. Error message is:
> [Error Code: -1, SQL State: 22003] The resulting value is outside the range
> for the data type INTEGER.
> I inserted the following row into my test table:
> insert into datetest (ID,
> startdate,
> enddate) values (
> 5,
> '2006-11-20 04:20:00.0',
> '2006-11-20 04:20:00.2');
> This test row works:
> select {fn timestampdiff(SQL_TSI_FRAC_SECOND, startdate, enddate)} as diff
> from datetest where id = 5
> DIFF
> 200000000
> The value also looks too large, which could be exacerbating the problem.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.