【问题标题】:Convert date using Apache Derby使用 Apache Derby 转换日期
【发布时间】:2016-07-15 10:24:32
【问题描述】:

我有一个日期存储在 varchar 字段中,格式如下:

3 Jun 2016

我想把它转换成另一个 varchar,这次是这种格式:

2016-06-03 00:00:00.000

我需要第二种格式的原因是为了与某个 API 交互。

附言。 This other SO question 类似,但仅涉及格式化存储为数据库中日期的字段。我的问题是将存储为字符串的日期转换为存储为字符串的另一个日期。

【问题讨论】:

  • 发完问答(分享知识,问答式)被投反对票有点遗憾
  • How to format a date using Apache Derby? 的可能重复项。和this 的副本。
  • 谢谢 Basil,这两个问题在关于格式化日期的意义上是相似的。但是我的不同,因为它是关于使用存储为字符串的日期。感谢您的研究
  • 您应该更清楚地编辑您的问题,准确指定该列的数据类型是什么,并说明您的文本数据以表示日期值的确切格式存储。并解释你的目标。你真的想要一天中的时间吗?
  • 注意 - 问题已调整

标签: sql stored-procedures derby date-format simpledateformat


【解决方案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;
    }
}

然后通过在数据库上运行以下sql语句将jar文件注入数据库:

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');

现在通过运行以下 sql 语句在数据库中创建存储过程:

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;

【讨论】:

    猜你喜欢
    • 2016-11-25
    • 2020-06-24
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    相关资源
    最近更新 更多