Сравните две даты в Java

Вы не можете INSERT войти в CTE. CTE - это логическая таблица, это псевдоним набора результатов. Вы можете SELECT из CTE. Не совсем уверен, чего вы там добиваетесь.

ОШИБКА: отношение "matrix_cte" не существует

Это сообщение об ошибке означает, что вы можете INSERT только в отношения (таблицы). CTE - это не таблица, это не постоянный объект в базе данных, и в вашей базе данных нет таблицы с именем matrix_cte.


Чтобы сгенерировать все отношения, как прямые, так и обратные, вы можете UNION два набора результатов вместе. Если ваша исходная таблица имеет только отношения в одном направлении, то вы можете использовать UNION ALL, и запрос будет быстрее. Я имею в виду, если исходная таблица никогда не имеет двух строк для одной и той же пары единиц:

unit1, unit2, 1
unit2, unit1, 2

, тогда вы можете использовать UNION ALL ниже. Если в оригинальной таблице могут быть такие дубликаты, вы должны использовать UNION для удаления лишних дубликатов.

-- all direct relationships as they are
SELECT 
    lookup_unit,
    lookup_unit_2,
    lookup_unit_relationship
FROM register_unit_matrix

UNION

-- inverse all relationships 
SELECT 
    lookup_unit_2,
    lookup_unit,
    CASE WHEN lookup_unit_relationship = 1 THEN 2 ELSE 1 END AS lookup_unit_relationship
FROM register_unit_matrix

Вы можете поместить этот запрос выше в представление или использовать как есть.

25
задан kiamlaluno 4 June 2013 в 11:34
поделиться

3 ответа

Равенство дат зависит от того, что две даты равны миллисекунде. Создание нового объекта Date с использованием new Date () никогда не будет равняться дате, созданной в прошлом. API-интерфейсы Joda Time упрощают работу с датами; однако, используя только SDK Java:

if (removeTime(questionDate).equals(removeTime(today)) 
  ...

public Date removeTime(Date date) {    
    Calendar cal = Calendar.getInstance();  
    cal.setTime(date);  
    cal.set(Calendar.HOUR_OF_DAY, 0);  
    cal.set(Calendar.MINUTE, 0);  
    cal.set(Calendar.SECOND, 0);  
    cal.set(Calendar.MILLISECOND, 0);  
    return cal.getTime(); 
}
42
ответ дан 28 November 2019 в 17:58
поделиться

Я бы использовал JodaTime для этого. Вот пример - допустим, вы хотите найти разницу в днях между двумя датами.

DateTime startDate = new DateTime(some_date); 
DateTime endDate = new DateTime(); //current date
Days diff = Days.daysBetween(startDate, endDate);
System.out.println(diff.getDays());

JodaTime можно скачать с здесь .

13
ответ дан CoolBeans 28 November 2019 в 17:58
поделиться

Мне непонятно, что вы хотите, но я упомяну, что класс Date также имеет метод compareTo , который можно использовать для определения одним вызовом, равны ли два объекта Date или (если они не равны), что происходит раньше.Это позволяет вам делать что-то вроде:

switch (today.compareTo(questionDate)) {
    case -1:  System.out.println("today is sooner than questionDate");  break;
    case 0:   System.out.println("today and questionDate are equal");  break;
    case 1:   System.out.println("today is later than questionDate");  break;
    default:  System.out.println("Invalid results from date comparison"); break;
}

Следует отметить, что документы API не гарантируют, что результаты будут -1, 0 и 1, поэтому вы можете использовать if-elses, а не переключатель в любом производственный код. Кроме того, если вторая дата равна нулю, вы получите исключение NullPointerException, поэтому может быть полезно заключить ваш код в try-catch.

10
ответ дан 28 November 2019 в 17:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: