Solved

iSeries DB2 -- CURRENT_TIMESTAMP -> Decimal(14) in SQL

Posted on 2007-11-28
4
8,156 Views
Last Modified: 2013-12-06
I am configuring a tool that, at a particular point, executes a SQL statement on a DB.  It is that generic ... my SQL statement can be anything.

I need a SQL statement that will put the current date / time into a particular field of a DB2 table on an AS400 / iSeries system.

I have Update TheTable Set TheField = CURRENT_TIMESTAMP Where ...

That errors out, however b/c TheField is of type DECIMAL (14).  My customer uses those for date /times.  The date / time would be encoded as 20071126143422

That outfit's programmer says I should generate the number using:
YEAR(CURRENT TIMESTAMP)*10000000000+
MONTH(CURRENT TIMESTAMP)*100000000+
DAY(CURRENT TIMESTAMP)*100000+
HOUR (current timestamp)*10000+
MINUTE(current timestamp)*100+
SECOND(current timestamp)

Is there no better way?  That is extremely unwieldy.

Thanks.
0
Comment
Question by:Daniel Wilson
  • 2
4 Comments
 
LVL 45

Assisted Solution

by:Kdo
Kdo earned 100 total points
ID: 20365773
Hi DanielWilson,

Dates on the AS/400 version of DB2 are just a bit different than those on LUW.  Converting the value to a decimal integer is just silly, but if that's the rule that you live by, you don't have a lot of choice.

That block of code should work just fine.  As you say, it's unwieldy, but it should work.  If you're going to do this in several places in your SQL, write the SQL into a function so that the ugly portion hides from view.

Then your SQL is just:

SELECT timestamptoint (current timestamp);


Good Luck,
Kent
CREATE FUNCTION timestamptoint (timestamp intime)
  RETURNS decimal (14) 
  DECLARE returnvalue decimal(14); 
  SELECT 
    YEAR(CURRENT TIMESTAMP)*10000000000+
    MONTH(CURRENT TIMESTAMP)*100000000+
    DAY(CURRENT TIMESTAMP)*100000+ 
    HOUR (current timestamp)*10000+
    MINUTE(current timestamp)*100+
    SECOND(current timestamp)
  INTO returnvalue
  FROM sysibm.sysdummy1; 
  RETURN returnvalue
END

Open in new window

0
 
LVL 18

Accepted Solution

by:
daveslash earned 400 total points
ID: 20366511

The following works for me:

select decimal(left(replace(replace(char(current timestamp),'-',''),'.',''),14))
from   sysibm/sysdummy1

HTH,
DaveSlash
0
 
LVL 32

Author Comment

by:Daniel Wilson
ID: 20367045
Dave, yours solved it for me.

KDO, I like the function idea, but was unable to get it to work ... possibly b/c of permissions, I'm not sure.

Thank you both.
0
 
LVL 45

Expert Comment

by:Kdo
ID: 20367569
Hi daveslash,

Ah...  Good idea, Dave.

I've used similar countless times.  Don't know why it didn't just pop into my head.    :)    (Maybe it's already full?)


Kent
0

Featured Post

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

Occasionally Windows/Microsoft Updates will fail to update. We have found a code that will delete all temporary files and re-register all dll's related to Windows/Microsoft Updates! This works 99% of the time to get the updates working again! The…
Sometimes a user will call me frantically, explaining that something has gone wrong and they have tried everything (read - they have messed it up more and now need someone to clean up) and it still does no good, can I help them?!  Usually the standa…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now