2016-07-15 9 views
0

У меня есть дата хранится в поле VARCHAR в следующем формате:Дата Преобразовать с помощью Apache Derby

3 Jun 2016 

Я хотел бы, чтобы преобразовать его в другой VARCHAR, на этот раз в этом формате:

2016-06-03 00:00:00.000 

Причина, по которой мне это нужно в этом втором формате, - это взаимодействие с определенным API.

Ps. This other SO question аналогичен, но относится только к форматированию поля, которое хранится как дата в базе данных. Мой вопрос заключается в преобразовании даты, хранящейся в виде строки, в другую дату, хранящуюся в виде строки.

+0

Это бит, чтобы получить голосование после публикации вопроса и ответа (для обмена знаниями, Q & A-style) – Fidel

+0

Возможный дубликат [Как отформатировать дату с помощью Apache Derby?] (http://stackoverflow.com/questions/2572568 /как- Формат-а-дата-используя-апаш-дерби). И дубликат [this] (http://stackoverflow.com/q/25449472/642706). –

+0

Спасибо, Василий, эти два вопроса похожи в том смысле, что речь идет о датах форматирования. Однако мой отличается от того, что он работает с датами, хранящимися как строки. Спасибо за исследование, хотя – Fidel

ответ

1

Apache Derby не имеет встроенной функции, но ее можно создать и вызвать из базы данных.

Во-первых, создать метод Java, который будет конвертировать дату:

package DbExamples.StoredProcedures; 

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateUtilities { 

    public static String convertDate(String inputDateString, String currentFormat, String outputFormatString) throws ParseException { 
     SimpleDateFormat inputFormat = new SimpleDateFormat(currentFormat); 
     Date inputDate = inputFormat.parse(inputDateString); 

     SimpleDateFormat outputFormat = new SimpleDateFormat(outputFormatString); 
     String result = outputFormat.format(inputDate); 

     return result; 
    } 
} 

Затем впрыснуть .jar файл в базу данных, выполнив следующую инструкцию SQL в базе данных:

CALL SQLJ.REMOVE_JAR('App.StoredProcedures', 0); 
CALL SQLJ.INSTALL_JAR('C:\dev\DbExamples\dist\DbExamples.jar', 'App.StoredProcedures', 0); 
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath', 'App.StoredProcedures'); 

Теперь создаем хранимую процедуру в базе данных, запустив следующую инструкцию:

drop function convertDate; 
create function convertDate(dateString varchar(8000), currentFormat varchar(8000), outputFormat varchar(8000)) 
returns varchar(8000) 
parameter style java no sql 
language java external name 'DbExamples.StoredProcedures.DateUtilities.convertDate'; 

Теперь вы можете запустить свой запрос:

select 
    convertDate('3 Jun 2016', 'd MMM yyyy', 'yyyy-MM-dd HH:mm:ss.SSS') as dt 
from SYSIBM.SYSDUMMY1; 

который возвращает:

2016-06-03 00:00:00.000 

На самом деле, этот метод может использоваться даже для преобразования VARCHAR в TIMESTAMP:

select 
    cast(convertDate('3 Jun 2016', 'd MMM yyyy', 'yyyy-MM-dd HH:mm:ss.SSS') as timestamp) as dt 
from SYSIBM.SYSDUMMY1;