Postgresql: целое число на сегодняшний день - PullRequest
0 голосов
/ 25 мая 2018

У меня проблема с преобразованием целочисленной даты (20180525) в дату в формате ГГГГ-ММ-ДД.Есть ли способ сделать это или я должен просто преобразовать его в код (в данном случае Java)?Любая помощь с этим будет наиболее ценной.Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

tl; dr

Хорошо работает либо SQL, либо Java.Для SQL см. правильный ответ от Али.

Для Java передайте LocalDate запросу PreparedStatement.

LocalDate.parse(                      // `LocalDate` represents a date-only value without time-of-day and without time zone. Works with SQL-standard `DATE` type.
    Integer.toString( 20180525 ) ,    // Convert integer to text, for a `String` object as input.
    DateTimeFormatter.BASIC_ISO_DATE  // Specify a formatting pattern to match our input string.
)                                     // Returns a `LocalDate` object.

2018-05-25

java.time

Что касается Java, упомянутого в Вопросе, здесь приведен код с использованием современного java.time классы.Нужно ли использовать для анализа строки SQL или Java, зависит от вашей ситуации и ваших вкусов, так как любой из маршрутов работает.

LocalDate

Класс LocalDateпредставляет значение только для даты без времени суток и без часового пояса.

Вам необходимо указать шаблон форматирования, соответствующий вашему вводу.В этом конкретном случае ваша входная строка имеет стандартный формат ISO 8601.В частности, «базовый» вариант форматов ISO 8601, который минимизирует использование разделителей.В java.time вы найдете , для которого этот конкретный шаблон форматирования удобно предопределен .

String input = Integer.toString( 20180525 ) ;  // Convert integer to text for input as `String`. 
DateTimeFormatter f = DateTimeFormatter.BASIC_ISO_DATE ;
LocalDate ld = LocalDate.parse( input , f ) ;

ld.toString (): 2018-05-25

JDBC

Начиная с JDBC 4.2 и более поздних версий, вы можете напрямую обмениваться объектами java.time с вашей базой данных.Всегда лучше использовать умные объекты, а не тупые строки.

String sql = "SELECT event_date FROM tbl WHERE event_date = ? ; " ;
…
myPreparedStatement.setObject( 1 , ld ) ;

И поиск.

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

О java.time

Фреймворк java.time встроен в Java 8 и более поздние версии.Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .

Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .

Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.* классах.

Где получить классы java.time?

  • Java SE 8 , Java SE 9 , Java SE 10, а позже
    • Встроенный.
    • Часть стандартного Java API с встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функций java.time перенесена на Java 6 & 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии реализации комплекта Android классов java.time.
    • Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянуто выше).См. Как использовать ThreeTenABP… .

ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и more .

0 голосов
/ 25 мая 2018

если ваши даты хранятся в виде целых чисел с YYYYMMDD, вы можете передать их в функцию даты, сначала приведя к TEXT.

SELECT date(20180525::TEXT)

, в противном случае используйте функцию to_date с форматером даты:

SELECT to_date(20180525::text, 'YYYYMMDD')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...