2016-11-03 4 views
0

'dateRange'라는 열이있는 데이터베이스를 상속 받았습니다. 가장 빠른/시작 날짜와 최신/종료 날짜를 찾으라는 질문을 받았습니다. (1) EarliestDay :SQL에서 날짜 범위의 최소값과 최대 값 찾기

SELECT 
@EarliestDate := SUBSTRING_INDEX(`dateRange`,'-',1) as StartingDate, 
@LatestDate := SUBSTRING_INDEX(`dateRange`,'-',-1) as EndingDate, 
MIN(@EarliestDate) as LowRange, 
MAX(@LatestDate) as HighRange 
FROM `dateRangeTable`; 

Output from Query

출력은 두 값 두 열을 도시한다 : 여기

dateRange Column

내 SQL 쿼리이다 : 여기 같은 원래의 데이터 열이 어떻게 보이는지 인 01/01) 및 2) LatestDay (01/31/15).

당연히 정확한 날짜는 2012 년 1 월 31 일이 아닌 12/31/15이어야하기 때문에 올바르지 않습니다.

내가 뭘 잘못하고 있니? 모든 의견은 크게 감사하겠습니다.

답변

0

모두 @EarliestDate@LatestDate문자열하지 날짜로 저장됩니다. 그래서 MySQL은 그들을 문자열로 정렬합니다. 즉, MAX와 MIN은 당신에게 알파벳 순서로 처음과 마지막을 제공합니다.

MySQL에서 올바르게 정렬하려면 문자열을 DATE으로 변환해야하며 MAX와 MIN은 가장 빠른 날짜와 가장 최근 날짜를 반환합니다.

날짜를 텍스트로 변환하는 방법에 대한 자세한 내용은 here을 참조하십시오.

편집

OK -의 그것을 단계적으로하자. 첫 번째 단계는 'from'및 'to'각 레코드를 분할하여 문자열로 남겨 두는 것입니다.

'보낸 사람'날짜에 연도가 누락되어 있으므로 'to'날짜부터이 연도를 가져와야합니다.

여기 않는 쿼리가 :

SELECT dateRange, 
CONCAT(SUBSTRING_INDEX(`dateRange`,'-',1), '/', SUBSTRING_INDEX(`dateRange`,'/',-1)) AS from_date, 
SUBSTRING_INDEX(`dateRange`,'-',-1) AS to_date 
FROM dateRangeTable; 

결과 :

enter image description here

다음 단계는 - 날짜에 그 문자열을 변환합니다.당신이 한 글쎄, 그건 그냥 정확히 STR_TO_DATE 기능을 감싸는 것 :

SELECT dateRange, 
STR_TO_DATE(CONCAT(SUBSTRING_INDEX(`dateRange`,'-',1), '/', SUBSTRING_INDEX(`dateRange`,'/',-1)), '%m/%d/%y') AS from_date, 
STR_TO_DATE(SUBSTRING_INDEX(`dateRange`,'-',-1), '%m/%d/%y') AS to_date 
FROM dateRangeTable; 

결과 :

enter image description here

마지막 단계 - 일 '에서'일 '에서'최초와 최신을 찾아 :

SELECT 
MIN(STR_TO_DATE(CONCAT(SUBSTRING_INDEX(`dateRange`,'-',1), '/', SUBSTRING_INDEX(`dateRange`,'/',-1)), '%m/%d/%y')) AS min_from_date, 
MAX(STR_TO_DATE(SUBSTRING_INDEX(`dateRange`,'-',-1), '%m/%d/%y')) AS max_to_date 
FROM dateRangeTable; 

결과 :

enter image description here

+0

응답과 안내에 감사드립니다. Galz. 나는 그것을 시도 할 것이다. 나는이 지체를 곧 업데이트 할 것이다. – microhtml

+0

Galz, 몇 번의 시련 후에도 여전히 문제가 있습니다. 내가 한 일은 다음과 같습니다. 1) Min과 Max에 주석을 달고 STR_TO_DATE 함수를 추가했습니다. 불행히도 나는 NULLS를 얻고 있습니다. 여기 내 코드는 다음과 같습니다. SELECT @EarliestDate : = SUBSTRING_INDEX ('dateRange', '-', 1) StartingDate, @LatestDate : = SUBSTRING_INDEX ('dateRange', '-', -1) EndingDate, #MIN (@EarliestDate) LowRange, #MAX (@LatestDate) 등 HighRange, STR_TO_DATE 등 ('EndingDate', '%의 m/% D/% Y') STR2DATE AS FROM ' – microhtml

+0

@microhtml을 movieTable' - 편집 참조 대답에. 희망이 도움이 – Galz

관련 문제