MariaDB는 'view' 테이블에서 datetime 필드로 필터링할 때 빈 집합을 반환하는 반면 MySQL(및 base view sql)은 정상적으로 작동합니다.
여기 첫번째 질문은 잘 설명되지 않았다면 죄송합니다.
여러 개의 테이블 조인을 사용하여 더 쉽게 선택할 수 있도록 DB에 여러 보기가 있으며, 해당 보기에는 date_registered(datetime) 필드가 있지만 해당 필드에서 WHERE를 사용하면 항상 빈 집합이 반환됩니다.
MariaDB 10.1.48 (Ubuntu 18.04 repo의 최신 버전)을 사용하고 있는데 MySQL 5.7에 대한 동일한 테스트는 정상적으로 작동합니다.
예제를 통해 보다 쉽게 볼 수 있습니다.
견본 자료
select id, date_registered from v_tracking limit 5;
+-------+---------------------+
| id | date_registered |
+-------+---------------------+
| 13258 | 2021-10-20 12:56:28 |
| 13257 | 2021-10-20 12:51:37 |
| 13256 | 2021-10-20 12:51:37 |
| 13255 | 2021-10-20 12:46:13 |
| 13254 | 2021-10-20 12:42:13 |
+-------+---------------------+
simple select with where date_registered > 'xxxx-xx-xx'
select id, date_registered from v_tracking where date_registered > '2021-10-01' limit 5;
Empty set (0.01 sec)
다른 필드로 필터링작업
select id, date_registered from v_tracking where id_company = 6 limit 5;
+-------+---------------------+
| id | date_registered |
+-------+---------------------+
| 13227 | 2021-10-20 06:52:13 |
| 13226 | 2021-10-20 06:43:22 |
| 13225 | 2021-10-20 06:43:04 |
| 13224 | 2021-10-20 06:37:12 |
| 13223 | 2021-10-20 06:23:23 |
+-------+---------------------+
5 rows in set (0.01 sec)
그리고 이제 가장 미친 부분은
'주문 기준' 작업 추가
select id, date_registered from v_tracking where date_registered > '2021-10-01' order by id desc limit 5;
+-------+---------------------+
| id | date_registered |
+-------+---------------------+
| 13258 | 2021-10-20 12:56:28 |
| 13257 | 2021-10-20 12:51:37 |
| 13256 | 2021-10-20 12:51:37 |
| 13255 | 2021-10-20 12:46:13 |
| 13254 | 2021-10-20 12:42:13 |
+-------+---------------------+
5 rows in set (0.01 sec)
날짜/timestamp로 변환을 강요하지만, 인덱스를 건너뛰게 될 가능성이 있습니다.
select id, date_registered from v_tracking where timestamp(date_registered) > '2021-10-01' limit 5;
+-------+---------------------+
| id | date_registered |
+-------+---------------------+
| 13258 | 2021-10-20 12:56:28 |
| 13257 | 2021-10-20 12:51:37 |
| 13256 | 2021-10-20 12:51:37 |
| 13255 | 2021-10-20 12:46:13 |
| 13254 | 2021-10-20 12:42:13 |
+-------+---------------------+
그러나 다른 방법은 아닌
select id, date_registered from v_tracking where date_registered > timestamp('2021-10-01') limit 5;
Empty set (0.01 sec)
xxxxx-xxxxxx:xxx'도 사용해 보았지만, 결과도 마찬가지로 날짜를 문자열로 사용하는 데 문제가 있을 수 있다고 생각했습니다(이전에는 문제가 없었지만), date_registered < now()>를 사용하면 빈 세트가 반환됩니다.
'show create v_tracking'을 사용하여 전체 SQL을 복사하고(모든 조인 등 포함), where date_registered > 'xxxx-xxx'를 추가하여 실행하면(뷰를 사용하는 대신) 작동합니다.
WTF가 여기가 그립습니까?
예, date_registered는 datetime 필드입니다.
desc v_tracking;
+------------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | | 0 | |
.....
| date_registered | datetime | YES | | NULL | |
+------------------------+--------------+------+-----+---------+-------+
좀 더 파헤친 끝에 마리아DB 버전을 최근 버전으로 업그레이드했고, 문제는 해결되었습니다.
언급URL : https://stackoverflow.com/questions/69645441/mariadb-returns-empty-set-when-filtering-by-a-datetime-field-on-a-view-table
'prosource' 카테고리의 다른 글
SSL을 사용하면 Facebook 좋아요 단추가 끊어집니다. (0) | 2023.10.10 |
---|---|
C# ODP.NET 파일 또는 어셈블리 로드 (0) | 2023.10.10 |
작은 int를 부울 최대 절전 모드로 매핑 (0) | 2023.10.05 |
HikariCP pass Oracle 사용자 지정 유형 (0) | 2023.10.05 |
데이터베이스 정상 양식이란 무엇이며 예를 들어 줄 수 있습니까? (0) | 2023.10.05 |