阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

对DB2系统当前日期进行格式化

190次阅读
没有评论

共计 1746 个字符,预计需要花费 5 分钟才能阅读完成。

原公司用的数据库是 Oracle 和 MySQL 居多,写的 SQL 语句也比较少,有些生疏了。现在的公司使用的 DB2 数据库,完全没接触过,导致一些函数的使用要在网上搜索案例,现在总结一点 DB2 的函数使用方法。

正确需求:查询出指定日期的工作日,页面传一个天数,并返回一个新的日期。

下面是时间表字段:

表名 字段 中文说明 备注
ZCALDERMANDT 客户端 判断登陆的系统是否为测试系统
LANG 语言 判断语言
YR 年份  
MTH 
ZDAY 
ZDATE 日期  
ZDAYS 星期 周日是 1,周六是 7,周一至周五是 2 至 6
OFF_SRT 自定休假区分 是否放假,上班 N,放假 Y
HLDY_YN 公休日有无  
YR_WEEK 年份  
WEEK_NO 周次  
CAL_RMK 备注  

刚开始项目需求说的不是很清楚,导致查询的结果不对,原来的需求只是说过滤掉周六周日休息时间和周一至周五存调休放假的时间,得到上班的时间。

下面的 SQL 语句查出的是系统当前时间和一个指定日期这个区间的上班记录,SQL 函数说明:

  • CURRENT DATE:获取系统当前日期,但是获取的日期有 – 连接即:2017-11-30,数据库中的日期存储分为年月日三个字段,且为字符型,这里就需要用到相关函数对日期进行格式化。
  • char(replace(char(date,iso),’-‘,”),8):转成字符 yyyymmdd 格式,将结果中的短横去掉后转换成 8 位的字符。
  • DECIMAL():也可以去掉 – 转换成 yyyymmdd 格式

select * from SAPHEC.ZCALDER a 
        where (a.MANDT=’720′   
              and a.LANG=’zh’
              –and a.YR=’2017′
              –and a.mth=’09’
              and a.ZDAYS!=’1′
              and a.ZDAYS!=’7′ and a.off_srt!=’Y’
              AND A.YR||A.MTH||A.ZDAY BETWEEN char(replace(char(CURRENT DATE,iso),’-‘,”),8) AND ‘20180101’)
union all
(select * from  SAPHEC.ZCALDER a where
              a.OFF_SRT=’N’
              and a.LANG=’zh’
              –and a.YR=’2017′
              and a.MANDT=’720′
              — and a.mth=’09’
              AND A.YR||A.MTH||A.ZDAY BETWEEN char(replace(char(CURRENT DATE,iso),’-‘,”),8) AND ‘20180101’);

根据正确需求,返回一个日期,正确的 SQL 语句如下:

  • rownumber() over():对重复的字段进行分组(类似 group by),并生成一个序列

select DATE from
(select DATE, ZDAYS, OFF_SRT, rownumber() over() as row_count from(

– 查询出 2017 年之后周末上班的数据
select YR||MTH||ZDAY AS DATE, ZDAYS, OFF_SRT from saphec.ZCALDER
where MANDT=’720′ and LANG=’zh’ AND YR||MTH||ZDAY > ‘20170101’ and  OFF_SRT = ‘N’ and  (ZDAYS = ‘1’ OR ZDAYS = ‘7’)

 union

– 查询出 2017 年之后的上班日,不包含周六周日
select YR||MTH||ZDAY AS DATE, ZDAYS, OFF_SRT from saphec.ZCALDER
where MANDT=’720′ and LANG=’zh’ AND YR||MTH||ZDAY > ‘20170101’ and OFF_SRT <> ‘Y’ AND ZDAYS IN (‘2′,’3′,’4′,’5′,’6’))

order by DATE fetch first 30 rows only) where row_count = 30;

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-12/149062.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1746字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中