on 2013 Jun 13 10:40 AM
I have a stored procedure similar to this. I'm trying to pass in the date '2013-05-06' and then add some different times to it, but I can't figure out how or if it's even possible:
alter procedure "test"."my_proc"(in business_date date, in i_emp_seq int) begin declare qdtl_startdate datetime; declare qdtl_enddate datetime; declare ettl_startdate datetime; declare ettl_enddate datetime; set qdtl_startdate = business_date + ' 05:00:00'; -- trying to get '2013-05-06 05:00:00' set qdtl_enddate = dateadd(day, 1, qdtl_startdate); -- trying to get '2013-05-07 05:00:00' set ettl_startdate = business_date + ' 02:00:00'; -- trying to get '2013-05-06 02:00:00' set ettl_enddate = dateadd(day, 1, ettl_startdate) + ' 03:59:59'; -- trying to get '2013-05-07 03:59:59' select ...
SQL Anywhere version: 9.0.2.3586
Request clarification before answering.
I'm sure there are lots of ways of doing this, but one way is to cast the date to a string, concatenate the time string and then cast the resultant string back to a timestamp (or datetime). You have attempted to do this but you need to add some explicit casts. Example:
alter function add_time_to_date( in d date, in t varchar(10) ) returns timestamp begin return cast( string( cast( d as varchar(16) ), ' ', t ) as timestamp ); end;
Example usage:
select add_time_to_date( cast( '2013-06-13' as date ), '5:06:07' );
returns the timestamp value 2013-06-13 05:06:07.000
Once you have your timestamp/datetime you can start to do your dateadd computations on the value.
alter procedure "test"."my_proc"(in business_date date, in i_emp_seq int) begin declare qdtl_startdate datetime; declare qdtl_enddate datetime; declare ettl_startdate datetime; declare ettl_enddate datetime; set qdtl_startdate = cast( string( cast( business_date as varchar(16) ), ' 05:00:00' ) as datetime ); set qdtl_enddate = dateadd( day, 1, qdtl_startdate ); set ettl_startdate = cast( string( cast( business_date as varchar(16) ), ' 02:00:00' ) as datetime ); set ettl_enddate = dateadd(day, 1, ettl_startdate) + ' 03:59:59'; ... end;
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
After some more research & experimenting I was able to figure it out:
set qdtl_startdate = dateadd(hour,5,business_date); -- trying to get '2013-05-06 05:00:00' set qdtl_enddate = dateadd(day, 1, qdtl_startdate); -- trying to get '2013-05-07 05:00:00' set ettl_startdate = dateadd(hour,2,business_date); -- trying to get '2013-05-06 02:00:00' set ettl_enddate = dateadd(day, 1, ettl_startdate); -- trying to get '2013-05-07 03:59:59'
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
68 | |
16 | |
12 | |
7 | |
7 | |
4 | |
4 | |
4 | |
4 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.