일, 월, 년의 처음 세 개의 열이 포함 된 테이블이 있습니다. 이 테이블에는 가입 분석에 대한 정보가 포함되어 있기 때문에 단일 열 날짜 대신이 ID를 분리하여 보관했습니다. 따라서 분리되어 있으면 매일 데이터를 분석 할 수 있습니다. 이제 몇 가지 데이터를 재설정하려는 상황이 있습니다. 날짜를 2008-01-01과 2010-10-01 사이로하는 데이터를 재설정하고 싶습니다. 그럼 어떻게 내가 일별, 월 및 일 열을 구분하여 mysql 쿼리에서 조건을 만들 수 있습니까?일, 월, 연도 열이있는 데이터베이스 검사 조건
답변
실제로 값을 날짜로 저장해야합니다. 그러나 당신은 여전히 당신이 원하는 것을 할 수 있습니다. 한 가지 방법이 있습니다.
where year * 10000 + month * 100 + day between 20080101 and 20101001
값은 모두 정수입니다. 쿼리가 인덱스를 이용할 수 있기 때문에 날짜가 더 좋습니다.
Gordon Linoff에게 감사드립니다. 당신의 대답은 훌륭하게 작동합니다. 고마워. 그리고 또한 나는 그 날짜가 좋을 것을 안다. – karan
TO_CHAR
기능으로 세 개의 INT
열을 연결할 수 있습니다. 해당 날짜를 TO_DATE
을 사용하여 변환 한 다음 비교하십시오.
WHERE TO_DATE(TO_CHAR(year || month || day), 'yyyymmdd') BETWEEN '20080101' AND '20100101';
alejandrohiron 감사합니다. 당신의 대답은 맞지만 TO_DATE 함수가없는 mysql을 사용하고 있습니다. – karan
걱정할 필요가 없습니다! 내가 대답 할 때 질문에 RDBMS 태그가 없었습니다. – alejandrogiron
MySQL 함수'STR_TO_DATE()'를 사용할 수도 있습니다. 자세한 정보는 http://www.sqlines.com/oracle-to-mysql/to_date에서 확인하십시오. – alejandrogiron
다음 시도하십시오 ...
이WHERE STR_TO_DATE(CONCAT(yearValue,
'-',
monthValue,
'-',
dayValue)) BETWEEN '2008-01-01' AND
'2010-10-01'
이 절은 날짜의 문자열 표현을 형성하기 위해 CONCAT()
함수를 사용하여 다음 STR_TO_DATE()
함수는 DATE
값으로 해당 문자열로 변환, 검사되고 지정된 범위와 비교됩니다.
질문이나 의견이 있으시면 언제든지 그에 따라 설명문을 게시하십시오.
더 읽을
https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_between
https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat (MySQL의의 CONCAT()
기능에 대한)
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date (MySQL의의 STR_TO_DATE()
기능에 대한) (MySQL의의 BETWEEN
연산자)
는 질문 a를 추가하십시오 태그'MySQL','SQL-Server'와 같은'SQL' 형식의 태그 – toonice
날짜/시간을 단일 엔터티로 저장 – Strawberry