Java-приложение читает файл CSV, этот файл имеет 2 столбца:
X Y
22/11 5
23/11 8
24/11 6
X и Y - ось X и ось Y соответственно, где X предполагается датой.Он пропускает год.
Я должен вставить эти значения в таблицу, для этого я готовлю функцию ():
BEGIN
UPDATE my_table set timestamp=to_timestamp(in_x_data), price=in_y_data WHERE timestamp = to_timestamp(in_x_data);
IF FOUND THEN
RETURN;
END IF;
BEGIN
INSERT INTO my_table ( timestamp, price ) VALUES ( to_timestamp(in_x_data), in_y_data );
END;
RETURN;
END;
Поскольку X не является меткой времени, я долженнайдите способ «преобразовать» его в реальную дату:
1) Я знаю, что Java-приложение запускается один раз в день;
2) Если приведенные выше значения являются значениями, это означает, что приложениезапущено 23/11 - у приложения (или этого файла) всегда был вчерашний день и завтрашний день, иногда даже послезавтра.
Чего бы я хотел достичь :
Идея состоит в том, чтобы разработать функцию так, чтобы она читала год (возможно, из select date_part('year', now());
) и использовала это значение (2018) для создания реальной даты:
22/11/2018
23/11/2018
24/11/2018
Помня о первом и последнем году, так что я думаю, что IF-ELSE должен быть включен.
Что-то вроде:
// today is 30/12/2018
year = select date_part('year', now());
new_x_data = to_timestamp(in_x_data + '/' +year);
// new_x_data == 01/01/2018
IF (new_x_data was long time ago ) {
new_x_data = to_timestamp(in_x_data + '/' +year+1);
// new_x_data == 01/01/2019
}
Извините за убийство десятилетий программирования.
Что ж, то же самое должно быть применимо к будущим и прошлым дням в начале и в концегод.
Я понятия не имею, как это сделать, и я также не очень знаком с PLpgSQL.