最近弄有关标签上的日期码DATECODE,遇到了自动生成的问题,这个呢可以在C#程序中根据日期自动生成,也可以通过数据库生成。今天先介绍下数据库生成,这里用Oracle数据库。
先来说一下需求:日期格式需要取年的后两位+月份转为A-L+当月第几周,如21I1就是今天的日期码。
相应的Oracle SQl语句如下:
SELECT TO_CHAR(SYSDATE, 'YY')||
DECODE(TO_CHAR(SYSDATE,'MM'),'01','A','02','B','03','C','04','D','05','E','06','F','07','G','08','H','09','I','10','J','11','K','12','L','MM')||
TO_CHAR(SYSDATE,'W') AS DATECODE FROM DUAL;
可能你会问,这个周是9月份的第二个周了,为啥显示为第1周?
有必要把一些常用的SQl解释下。
SELECT TO_CHAR(SYSDATE, 'w') FROM DUAL; --1个月中的第几周
(从每月1号开始算,日期+6天为每1周结尾)
SELECT TO_CHAR(SYSDATE, 'ww') FROM DUAL; --1年中的第几周(每年1月1日为第1周开始,日期+6天为每1周结尾)
SELECT TO_CHAR(SYSDATE, 'iw') FROM DUAL; --1年中的第几周(星期一至星期日算1周,且每年的第一个星期一为第1周)
SELECT TO_CHAR(SYSDATE, 'd') FROM DUAL; --1周的第几天
SELECT TO_CHAR(SYSDATE, 'day') FROM DUAL; --当前日期是星期几,可设置显示英文还是中文
SELECT TO_CHAR(SYSDATE, 'ddd') FROM DUAL; --1年中第几天
SELECT TO_CHAR(SYSDATE,'q') FROM DUAL; --1年中第几季度