扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在日期的表示方面,这也是我经常碰到的一个问题。用于日期的缺省格式由数据库的地区代码决定,该代码在数据库创建的时候被指定。例如,我在创建数据库时使用 territory=US 来定义地区代码,则日期的格式就会像下面的样子:
values current date 1 ---------- 05/30/2003 1 record(s) selected. |
DEF | 使用与地区代码相匹配的日期和时间格式。 |
EUR | 使用欧洲日期和时间的 IBM 标准格式。 |
ISO | 使用国际标准组织(ISO)制订的日期和时间格式。 |
JIS | 使用日本工业标准的日期和时间格式。 |
LOC | 使用与数据库地区代码相匹配的本地日期和时间格式。 |
USA | 使用美国日期和时间的 IBM 标准格式。 |
在 Windows 环境下,要将缺省的日期和时间格式转化成 ISO 格式(YYYY-MM-DD),执行下列操作:
sqllib\bnd
。
例如:
在 Windows 环境: c:\program files\IBM\sqllib\bnd
在 UNIX 环境: /home/db2inst1/sqllib/bnd
db2 connect to DBNAME db2 bind @db2ubind.lst datetime ISO blocking all grant public |
(在你的实际环境中, 用你的数据库名称和想使用的日期格式分别来替换 DBNAME and ISO。)
现在,你可以看到你的数据库已经使用 ISO 作为日期格式了:
values current date 1 ---------- 2003-05-30 1 record(s) selected. |
在上面的例子中,我们展示了如何将 DB2 当前的日期格式转化成系统支持的特定格式。
但是,如果你想将当前日期格式转化成定制的格式(比如‘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))) 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 || '/' || mm || '/' || dd || ' ' || hh || ':' || mi || ':' || ss when 'nnnnnn' then nnnnnn else 'date format ' || coalesce(fmt,' <null> ') || ' not recognized.' end from tmp |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者