Как отфильтровать дату и время с тремя полями день, месяц, год в EF Core и Postgresql - PullRequest
0 голосов
/ 09 января 2020

В моей таблице три поля Datetime могут быть нулевыми

Customer
-----------------
public int? Day { get; set; }
public int? Month { get; set; }
public int? Year { get; set; }
......

Как преобразовать три поля в Datetime и отфильтровать дату рождения клиента между двумя датами Timetime, например: (1992-08-01,1992-08-31) in Postgresql и EFCore 3

Ответы [ 3 ]

1 голос
/ 09 января 2020

Вы можете использовать функцию make_date():

select make_date(year, month, day)
from the_table;

Или, если вам нужно, в предложении where

select *
from the_table
where make_date(year, month, day) between date '1992-08-01' and date '1992-08-31';

Но у вас действительно должен быть только один столбец типа date в вашей таблице.

0 голосов
/ 17 января 2020

См. Этот выпуск: https://github.com/npgsql/efcore.pg/issues/1204. Попробую поработать над этим в ближайшее время.

0 голосов
/ 09 января 2020

Я думаю, что вы можете использовать конкатенацию и функцию приведения вместе для сравнения. Например, как показано ниже, форма

select concat(Year,'-',Month,'-',Day)::date > concat(Year,'-',Month,'-',Day)::date

Реальный Пример: возвращает true или false

select concat('1997','-','08','-','01')::date > concat('1997','-','07','-','01')::date
...