如何对日期进行加减运算,即使我想获得某一个日期的前1天,前N天,前一个月,前N个月,前1年,前N年,后1天,后N天,1月后,N月后,1年后,N年后....。谢谢!
日期和字符型的转换都是需要自己开发的吗?对format的支持好像很简单?
另外请问一个类似的转换函数,把字符型'123'->;'000123',这样的左补特定字符或者右补特定字符,有这样的函数吗?
谢谢,我是个DB2的新手,在线等待,拜托了!
ibmxp 回复于:2004-08-15 22:36:42日期运算的函数是有的,
类型转换的函数也有,
左补特定字符或者右补特定字符视开发工具而定!!
tophi 回复于:2004-08-16 12:28:57服了你了,这样的回答有什么啊?
第一个问题我已经解决日期的加减date(days(a)+ n),但是对月份、年份还是搞不定阿。
第二个问题我当然那知道有,只是不方便。像日期等转换,必须使用它特定的格式才能转换,而不能带转化的format,不好用。
第三个问题,当然是问sql开发了,如果是c或者java或者其他,还用在这里问吗?
ibmxp 回复于:2004-08-16 12:59:40values( date(:acSysDate) ) + n MONTHS/YEARS ) INTO :acTmpDate;
ibmxp 回复于:2004-08-16 13:13:18因为没有更好的术语,所以您还可以使用英语来执行日期和时间计算:
current date + 1 YEAR
current date + 3 YEARS + 2 MONTHS + 15 DAYS
current time + 5 HOURS - 3 MINUTES + 10 SECONDS
要计算两个日期之间的天数,您可以对日期作减法,如下所示:
days (current date) - days (date('1999-10-22'))
而以下示例描述了如何获得微秒部分归零的当前时间戳记:
CURRENT TIMESTAMP - MICROSECOND (current timestamp) MICROSECONDS
如果想将日期或时间值与其它文本相衔接,那么需要先将该值转换成字符串。为此,只要使用 CHAR() 函数:
char(current date)
char(current time)
char(current date + 12 hours)
要将字符串转换成日期或时间值,可以使用:
TIMESTAMP ('2002-10-20-12.00.00.000000')
TIMESTAMP ('2002-10-20 12:00:00')
DATE ('2002-10-20')
DATE ('10/20/2002')
TIME ('12:00:00')
TIME ('12.00.00')
如果你想将当前日期格式转化成定制的格式(比如‘yyyymmdd’),那又该如何去做呢?按照我的经验,最好的办法就是编写一个自己定制的格式化函数。
下面是这个 UDF 的代码:
create function ts_fmt(TS timestamp, fmt varchar(20))
returns varchar(50)
return
with tmp (dd,mm,yyyy,hh,mi,ss,nnnnnn) as
(
select
substr( digits (day(TS)),9),
substr( digits (month(TS)),9) ,
rtrim(char(year(TS))) ,
substr( digits (hour(TS)),9),
substr( digits (minute(TS)),9),
substr( digits (second(TS)),9),
rtrim(char(microsecond(TS)))
发表评论