- 论坛徽章:
- 0
|
本帖最后由 fufq 于 2010-02-12 14:57 编辑 \n\n脚本内容如下:\r\nroot@# more offlinereason.sh\r\n#!/bin/ksh\r\n\r\nYEAR=`date +%Y`;\r\ndate1=`date +%d`; #当前日期,用以判断是否为每月1日\r\nMONTH=`date +%m`;\r\nyesterday1=`TZ=$TZ+32 date +%Y%m%d`; #昨天的日期,格式:20100210,查询条件\r\nyesterday2=`TZ=$TZ+32 date +%Y_%m_%d`;#昨天的日期,格式:2010_02_10,用做导出的文件名\r\n\r\necho \"1-Year is \"$YEAR \" MONTH IS \"$MONTH \", yes1 is \"$yesterday1>offlinereason.sql\r\nif [ $date1 -eq 01 ]; then #当前日期为01日,则话单表月份需取上个月月份\r\n{\r\n if [ $MONTH -eq 01 ]; then #当前月份为01月份,则需要获取到去年12月份的值,否则保持当前值不变\r\n {\r\n MONTH=12\r\n YEAR=`expr $YEAR - 1`\r\n echo \"date is 01,and month is 01,MONTH-1 IS \"$MONTH\" ,YEAR is \"$YEAR>>offlinereason.sql\r\n\r\n };else #非1月份,则当日期为01日的时候,月份直接取上一月月份,年不变;\r\n {\r\n MONTH=`expr $MONTH - 1` \r\n echo \"date is 01,month is not 01,than month-1 is \"$MONTH>>offlinereason.sql\r\n } ;fi\r\n };\r\nfi #如果当前日期不为01,则,月份保持为当月不变\r\n\r\necho \"unload to $yesterday2.txt\r\nselect * from rec_210_$YEAR$MONTH where substr(begintime,1, =\'$yesterday1\'\">>offlinereason.sql \r\n\r\n==========================================\r\n当前系统日期:\r\nroot@# date\r\n2010年01月01日 星期五 14时41分14秒 CST\r\n==========================================\r\n脚本执行结果如下:\r\nroot@CNCSCDN-SHPTL1 # more offlinereason.sql\r\n1-Year is 2010 MONTH IS 01 , yes1 is 20091230\r\ndate is 01,and month is 01,MONTH-1 IS 12 ,YEAR is 2009\r\nunload to 2009_12_30.txt\r\nselect * from rec_210_200912 where substr(begintime,1, =\'20091230\'\r\n\r\n+================================\r\n问题:\r\n1、为何每月01日的话,yesterday取到的前一天日期都是上月的30日,永远取不到31日?\r\n2、同1,怎么才可以按不同的月份取到前一天日期实际的30日、31日或者28日?\r\n\r\n3、当当前月份为02月时,最后结果MONTH-1=1了,而不是我要的01,如:\r\n\r\nroot@# date\r\n2010年02月01日 星期一 14时30分20秒 CST\r\n执行结果:\r\nroot@ # more offlinereason.sql\r\n1-Year is 2010 MONTH IS 02 , yes1 is 20100130\r\ndate is 01,month is not 01,than month-1 is 1\r\nunload to 2010_01_30.txt\r\nselect * from rec_210_20101 where substr(begintime,1, =\'20100130\' |
|