- 论坛徽章:
- 0
|
急! 关于to_char函数的请教?
select char(value) as value1 from table1 可以把value的日期变为字符串格式,但是不能变成类似“yyyy/mm”的格式。
如果想变成类似“yyyy/mm”的格式,需要自己写存储过程:
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)))
from sysibm.sysdummy1 )
select case fmt
when 'yyyymmdd'
then yyyy || mm || dd
when 'mm/dd/yyyy'
then mm || '/' || dd || '/' || yyyy
when 'yyyy/dd/mm hh:mi:ss'
then yyyy || '/' || dd || '/' || mm || ' ' || hh || ':' || mi || ':' || ss
when 'yyyy/mm'
then yyyy || '/' || mm
when 'nnnnnn'
then nnnnnn
else
'date format ' || coalesce(fmt,' ') || ' not recognized.'
end
from tmp
最开始,使用了一个公共表表达式来将一个时间戳记(第一个输入参数)分别剥离为单独的时间元素。然后检查提供的定制格式(第二个输入参数)并将前面剥离出的元素按照该定制格式的要求加以组合。
这个函数非常灵活。如果要增加另外一种模式,可以很容易地再添加一个 WHEN 子句来处理。在使用过程中,如果用户提供的格式不符合任何在 WHEN 子句中定义的任何一种模式时,函数会返回一个错误信息。
使用方法示例:
select ts_fmt(value,'yyyy/mm') as value1 from table1
返回:2005/07 |
|