提交 79203296 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Write week years in TO_CHAR correctly

上级 621bfd06
......@@ -785,18 +785,30 @@ public class ToChar {
}
StringUtils.appendZeroPadded(output, 4, posYear);
i += 5;
} else if ((cap = containsAt(format, i, "YYYY", "IYYY", "RRRR")) != null) {
} else if ((cap = containsAt(format, i, "YYYY", "RRRR")) != null) {
StringUtils.appendZeroPadded(output, 4, posYear);
i += 4;
} else if ((cap = containsAt(format, i, "YYY", "IYY")) != null) {
} else if ((cap = containsAt(format, i, "IYYY")) != null) {
StringUtils.appendZeroPadded(output, 4, DateTimeUtils.getIsoWeekYear(dateValue));
i += 4;
} else if ((cap = containsAt(format, i, "YYY")) != null) {
StringUtils.appendZeroPadded(output, 3, posYear % 1000);
i += 3;
} else if ((cap = containsAt(format, i, "YY", "IY", "RR")) != null) {
} else if ((cap = containsAt(format, i, "IYY")) != null) {
StringUtils.appendZeroPadded(output, 3, DateTimeUtils.getIsoWeekYear(dateValue) % 1000);
i += 3;
} else if ((cap = containsAt(format, i, "YY", "RR")) != null) {
StringUtils.appendZeroPadded(output, 2, posYear % 100);
i += 2;
} else if ((cap = containsAt(format, i, "I", "Y")) != null) {
} else if ((cap = containsAt(format, i, "IY")) != null) {
StringUtils.appendZeroPadded(output, 2, DateTimeUtils.getIsoWeekYear(dateValue) % 100);
i += 2;
} else if ((cap = containsAt(format, i, "Y")) != null) {
output.append(posYear % 10);
i += 1;
} else if ((cap = containsAt(format, i, "I")) != null) {
output.append(DateTimeUtils.getIsoWeekYear(dateValue) % 10);
i += 1;
// Month / quarter
......
......@@ -1486,6 +1486,15 @@ public class TestFunctions extends TestBase implements AggregateFunction {
assertResult("0 BC", stat,
"SELECT TO_CHAR(X, 'Y BC') FROM U");
assertResult("1979 A.D.", stat, "SELECT TO_CHAR(X, 'YYYY B.C.') FROM T");
assertResult("2013", stat, "SELECT TO_CHAR(DATE '2013-12-30', 'YYYY') FROM DUAL");
assertResult("013", stat, "SELECT TO_CHAR(DATE '2013-12-30', 'YYY') FROM DUAL");
assertResult("13", stat, "SELECT TO_CHAR(DATE '2013-12-30', 'YY') FROM DUAL");
assertResult("3", stat, "SELECT TO_CHAR(DATE '2013-12-30', 'Y') FROM DUAL");
// ISO week year
assertResult("2014", stat, "SELECT TO_CHAR(DATE '2013-12-30', 'IYYY') FROM DUAL");
assertResult("014", stat, "SELECT TO_CHAR(DATE '2013-12-30', 'IYY') FROM DUAL");
assertResult("14", stat, "SELECT TO_CHAR(DATE '2013-12-30', 'IY') FROM DUAL");
assertResult("4", stat, "SELECT TO_CHAR(DATE '2013-12-30', 'I') FROM DUAL");
assertResult("08:12 AM", stat, "SELECT TO_CHAR(X, 'HH:MI AM') FROM T");
assertResult("08:12 A.M.", stat, "SELECT TO_CHAR(X, 'HH:MI A.M.') FROM T");
assertResult("02:04 P.M.", stat, "SELECT TO_CHAR(X, 'HH:MI A.M.') FROM U");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论