다음 시나리오를 고려하십시오. - 검색 쿼리와 일치하는 하나 이상의 필드로 레코드를 검색하기 위해 들어오는 Ajax 요청을 수신하는 PHP 서버가 있습니다.MySQL - 가변 날짜 형식 및 사용자 정의 필드가있는 날짜 별 쿼리
이 시스템은 서로 다른 서버에 배포되며, 다음과 같은 서로 다른 날짜 형식을 가질 수
클라이언트 1 (유럽) - 날짜 형식 22-02-2016 (DD-MM-YYYY)가
클라이언트 2 (미국) - 날짜 형식 02-22-2016 (mm-dd-yyyy)
* 각 클라이언트는 관리자 패널에서 자신의 사용자 정의 날짜 & 시간 형식을 설정할 수 있습니다.
그래서 쿼리가있을 수 있습니다 중 하나
{"first_name": "john","order_date":"22-02-2016"}
또는
{"first_name": "john","order_date":"02-22-2016"}
또는 음모가 두껍게 곳도
다음{"first_name": "john","order_date":"2016-02-22"}
인 - 시스템도 지원하는 사용자 정의 필드 따라서 검색어는 다음과 같을 수도 있습니다.
{"first_name": "john","custom_field":"22-02-2016"}
여기서 custom_field
은 데이터베이스에 DATE 필드로 저장되지만 PHP 서버는 필드 유형을 알지 못합니다 (기술적으로이 정보를 검색 할 수는 있지만 지금은 피하기 위해 노력하고 있습니다).
custom_field
이 날짜 필드인지 여부를 명시 적으로 알지 못하고 데이터베이스 쿼리를 실행할 수 있고 여전히 다른 형식을 지원할 수 있기를 원합니다.
이상적으로는 클라이언트 형식에 따라 날짜를 비교하기 위해 데이터베이스에서 사용하는 형식을 변경할 수 있습니다. 즉, 쿼리에 날짜 필드가 포함되어 있으면 주어진 형식을 사용한다는 것을 MySQL에 알릴 수 있습니다. 또는 테이블/데이터베이스 스키마에서 전역으로 변경하십시오.
내 대안은 요청을 반복하고 클라이언트 형식의 각 날짜 필드를 MySQL 형식으로 변환하거나 정규식을 사용하여 쿼리 날짜를 변환하는 것입니다. 그러나 가능하다면 데이터베이스 레벨에서 오히려이를 해결할 것입니다.
모든 날짜가 YYYY-MM-DD와 같은 ISO 8601 표준 형식으로 전달되도록 API를 수정해야합니다. –
@GordonLinoff 덕분에, 내가 뭘해야할지 걱정했다. 데이터베이스 수준에서이 작업을 수행 할 수있는 방법이 있습니까? – Yani
개인적으로 유닉스 타임 스탬프를 가지고 갈 것입니다. 빠른 쿼리와 프론트 엔드에서의 조작이 더 쉽습니다. – Brian