我在SQL Select子句中有以下Oracle SQL语句,它将01.04.2015
之类的日期转换为78
,01.07.2015
转换为79
等等(值) beginDate可以是01.04.2015
或01.07.2015
):
SELECT to_char(beginDate, 'q') + 4 * to_char(beginDate, 'yy') + 16
FROM myDateValuesTable;
现在,通过使用相同类型的数学表达式,将当前Date始终转换为Java中的相同值非常重要。我不知道如何在Java中编写这些步骤?这是第一个想法:
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR); // the value is 2015
int month = calendar.get(Calendar.MONTH); // the value is 09
int quarter = (month / 3) + 1; // the value is 3
对于01.04.2015
,必须将其转换为78
,将01.07.2015
转换为79
。我该如何解决这个问题?
答案 0 :(得分:1)
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
System.out.println(month / 3 + 1 + 4 * (year % 100) + 16);
Oracle 'q'
返回一年中的季度。这是通过获取月份值并计算month / 3 + 1
在Java中获得的。
然后,Oracle 'yy'
返回年份的最后两位数字。这是通过获取年份值并计算year % 100
在Java中获得的。
您可以使用以下代码对其进行测试:
public static void main(String args[]) throws Exception {
System.out.println(getNumber("01.04.2015")); // prints 78
System.out.println(getNumber("01.07.2015")); // prints 79
}
private static int getNumber(String dateStr) throws ParseException {
Date date = new SimpleDateFormat("dd.MM.yyyy").parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
return month / 3 + 1 + 4 * (year % 100) + 16;
}