[CALCITE-6215] Support century format datetime/timestamp in pg
diff --git a/babel/src/test/resources/sql/postgresql.iq b/babel/src/test/resources/sql/postgresql.iq
index 4cc2661..9dcb67d 100644
--- a/babel/src/test/resources/sql/postgresql.iq
+++ b/babel/src/test/resources/sql/postgresql.iq
@@ -63,6 +63,11 @@
2022-06-03 12:15:48.678
!ok
+select to_char(timestamp '2022-06-03 12:15:48.678', 'CC');
+EXPR$0
+21
+!ok
+
# -----------------------------------------------------------------------------
# Posix regex
diff --git a/core/src/main/java/org/apache/calcite/util/format/FormatElementEnum.java b/core/src/main/java/org/apache/calcite/util/format/FormatElementEnum.java
index ea35aa9..547693c 100644
--- a/core/src/main/java/org/apache/calcite/util/format/FormatElementEnum.java
+++ b/core/src/main/java/org/apache/calcite/util/format/FormatElementEnum.java
@@ -41,6 +41,13 @@
* @see FormatModels#DEFAULT
*/
public enum FormatElementEnum implements FormatElement {
+ CC("cc", "century (2 digits) (the twenty-first century starts on 2001-01-01)") {
+ @Override public void format(StringBuilder sb, Date date) {
+ final Calendar calendar = Work.get().calendar;
+ calendar.setTime(date);
+ sb.append(String.format(Locale.ROOT, "%2d", calendar.get(Calendar.YEAR) / 100 + 1));
+ }
+ },
D("F", "The weekday (Monday as the first day of the week) as a decimal number (1-7)") {
@Override public void format(StringBuilder sb, Date date) {
final Calendar calendar = Work.get().calendar;
diff --git a/core/src/main/java/org/apache/calcite/util/format/FormatModels.java b/core/src/main/java/org/apache/calcite/util/format/FormatModels.java
index 6cd8db3..f7c8e3f 100644
--- a/core/src/main/java/org/apache/calcite/util/format/FormatModels.java
+++ b/core/src/main/java/org/apache/calcite/util/format/FormatModels.java
@@ -28,6 +28,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import static org.apache.calcite.util.format.FormatElementEnum.CC;
import static org.apache.calcite.util.format.FormatElementEnum.D;
import static org.apache.calcite.util.format.FormatElementEnum.DAY;
import static org.apache.calcite.util.format.FormatElementEnum.DD;
@@ -161,6 +162,7 @@
map.put("Month", MONTH);
map.put("Mon", MON);
map.put("MM", MM);
+ map.put("CC", CC);
map.put("DDD", DDD);
map.put("DD", DD);
map.put("D", D);
diff --git a/core/src/test/java/org/apache/calcite/util/format/FormatElementEnumTest.java b/core/src/test/java/org/apache/calcite/util/format/FormatElementEnumTest.java
index 5e431d0..75eac7e 100644
--- a/core/src/test/java/org/apache/calcite/util/format/FormatElementEnumTest.java
+++ b/core/src/test/java/org/apache/calcite/util/format/FormatElementEnumTest.java
@@ -29,6 +29,10 @@
*/
class FormatElementEnumTest {
+ @Test void testCC() {
+ assertFormatElement(FormatElementEnum.CC, "2014-09-30T10:00:00Z", "21");
+ }
+
@Test void testDay() {
assertFormatElement(FormatElementEnum.DAY, "2014-09-30T10:00:00Z", "Tuesday");
}