/// <summary>
/// 根据当前月份生成当期上期同期日期条件
/// </summary>
public class YF
{
private int year;
public int Year
{
get { return year; }
set { year = value; }
}
private int month;
public int Month
{
get { return month; }
set { month = value; }
}
public YF() { }
public YF(int year, int month)
{
this.year = year;
this.month = month;
}
public YF(string yf)
{
Regex reg = new Regex(@"\d{6}", RegexOptions.IgnoreCase);
if (!reg.IsMatch(yf))
throw new Exception("请输入6位数");
year = int.Parse(yf.Substring(0, 4));
month = int.Parse(yf.Substring(4, 2));
}
/// <summary>
/// 去年同期
/// </summary>
/// <returns></returns>
public string GetSTLY()
{
DateTime currMonthStart = new DateTime(year, month, 1);
return currMonthStart.AddYears(-1).ToString("yyyyMM");
}
/// <summary>
/// 获取本期及同期期间表达式(期间格式如:201807)
/// </summary>
/// <param name="fieldName"></param>
/// <returns></returns>
public string GenerateQjCondition(string fieldName)
{
List<string> conds = new List<string>();
DateTime currMonthStart = new DateTime(year, month, 1);
//本期
conds.Add(string.Format(" {0} = '{1}' "
, fieldName
, currMonthStart.ToString("yyyyMM")));
//上期
/*
conds.Add(string.Format(" {0} = '{1}' "
, fieldName
, currMonthStart.AddMonths(-1).ToString("yyyyMM")));
*/
//同期
conds.Add(string.Format(" {0} = '{1}' "
, fieldName
, currMonthStart.AddYears(-1).ToString("yyyyMM")));
return string.Format("({0})", string.Join(" OR ", conds.ToArray()));
}
/// <summary>
/// 获取本期、同期、上期条件表达式
/// </summary>
/// <param name="rqFieldName"></param>
/// <returns></returns>
public string GenerateRqCondition(string rqFieldName)
{
List<string> conds = new List<string>();
DateTime currMonthStart = new DateTime(year, month, 1);
//本期
conds.Add(string.Format("({0} >= '{1}' AND {0} <'{2}' )"
, rqFieldName
, currMonthStart.ToString("yyyy-MM-dd")
, currMonthStart.AddMonths(1).ToString("yyyy-MM-dd")));
//上期
conds.Add(string.Format("({0} >= '{1}' AND {0} <'{2}' )"
, rqFieldName
, currMonthStart.AddMonths(-1).ToString("yyyy-MM-dd")
, currMonthStart.ToString("yyyy-MM-dd")));
//同期
conds.Add(string.Format("({0} >= '{1}' AND {0} <'{2}' )"
, rqFieldName
, currMonthStart.AddYears(-1).ToString("yyyy-MM-dd")
, currMonthStart.AddYears(-1).AddMonths(1).ToString("yyyy-MM-dd")));
return string.Format("({0})", string.Join(" OR ", conds.ToArray()));
}
}