Как запросить базу данных для строк на основе поля datetime, когда мне доступен только год? - PullRequest
0 голосов
/ 09 мая 2020

Мне нужно выбрать все строки из таблицы на основе года, однако единственное поле, которое я могу запросить, - это поле DATETIME, которое может читать, например, 2020-05-08 14:30:34.

Как я могу вернуть записи только на основе не год?

$records = MedicalRecord::find()
    ->where(['dateCreated' => '2020'])
    ->all();

Ответы [ 2 ]

1 голос
/ 10 мая 2020

Вы можете использовать andWhere() и сравнивать даты начала и конца года.

Вероятно, стоит иметь в виду, что это было бы эквивалентом сравнения дат как строк, но, поскольку порядок - ГГ-мм-дд, он работает.

$records = MedicalRecord::find()
    ->where(['>=', 'dateCreated', '2020-01-01 00:00:00'])
    ->andWhere(['<', 'dateCreated', '2021-01-01 00:00:00'])
    ->all();

Таким образом yii генерирует код, который работает с базой данных

Если вы можете гарантировать, что вы будете запускать свое приложение только с движком базы данных, который поддерживает функцию YEAR(), то ответ Сергея, вероятно, будет лучшим. Но если вы захотите перейти на PostgreSql, Oracle ... Он перестанет работать.

1 голос
/ 09 мая 2020

Вы можете использовать функцию YEAR(), попробуйте это:

$records = MedicalRecord::find()
    ->where(['YEAR(dateCreated)' => 2020])
    ->all();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...