내가 내 목적을 설명하자, 나는 차량 예약 응용 프로그램을 어디서 방문자가 그의 여행의 시작 날짜와 종료 날짜를 추가 할 것입니다, 거기에 가용성 목록에있는 드라이버 목록이 있습니다 available_from_date 및 available_to_date)은 작동하는 동안 지속되며, 작동하지 않는 특정 날짜의 exclude_dates 필드가 있습니다. 응용 프로그램은 사용자가 입력 한 여행 날짜 동안 사용할 수있는 차량 목록을 찾아야합니다. 예를 들어 사용자가 13th 9 월 2014-17 9 월 2014 동안 장소 A에서 B로 이동하기를 원하면 데이터베이스는이 기간 동안 사용 가능한 택시 목록을 반환해야하며이 기간 내에 제외 날짜가 없어야합니다 .선택 쿼리 mysql 저장된 함수를 사용하여
이제 테이블에 쉼표로 구분 된 형식으로 exclude_dates를 저장했습니다. 별도의 테이블을 만들었지 만 쿼리를 실행하는 데 더 많은 시간이 걸릴 수 있습니다. mysql 함수를 만들려고했습니다. 실제 검색 쿼리 내에서 호출되며 기간에 제외 된 날짜가있는 경우 true를 반환하고 그렇지 않은 경우 false를 반환합니다.
이 내가
SELECT id, exclude_dates
FROM `taxi_route`
WHERE status = 1
AND `to_city` = 'Surat'
AND `from_city` = 'Ahmedabad'
AND `trip_type` = 2
AND `available_from_date` <= '2014-09-13'
AND available_to_date >= '2014-09-17'
AND STR_TO_DATE((SELECT `split`(exclude_dates, ',', 1)),'%d-%m-%Y')
NOT BETWEEN STR_TO_DATE('13-09-2014','%d-%m-%Y')
AND STR_TO_DATE('17-09-2014','%d-%m-%Y')
분할을 작성한 쿼리는
DELIMITER $$
CREATE FUNCTION split(str VARCHAR(500), delchar VARCHAR(2), x INT)
RETURNS VARCHAR(500)
BEGIN
RETURN SUBSTR(SUBSTRING_INDEX(str, delchar, x),
LENGTH(SUBSTRING_INDEX(str, delchar, x-1))+IF(x > 1, 2, 1));
END$$
DELIMITER ;
이 난만큼 지금까지 잘 작동 내가 쉼표 형식으로 현재 날짜를 분리하는 MySQL의에서 만든 함수입니다 split (exclude_dates, ',', 1)에서 1을 전달하지만 exclude_dates에 날짜가 하나 이상있는 경우 작동하지 않습니다 누군가가 제안하거나 안내 할 수 있습니다. 어떻게 수행 할 수 있습니까? 데이터베이스 스냅 샷은 http://i.imgur.com/JaI8MSx.png
중지 -> 'STR 안녕 _Kermit, 의견을 주셔서 감사하지만 우리는 유효한 날짜 형식으로 또한 사용자가 주어진 문자열을 변환해야합니다 exclude_dates는 varchar이고 우리가 그것을 밖으로 날짜를 추출 할 때 문자열이 될 것이라고() ' – Kermit
@ 다시 날짜 형식으로 변환해야합니까? –
날짜를 문자열로 저장하면 안됩니다. – Kermit