mysql에서 쿼리 질문입니다. 채택완료
테이블 s_log 에는 항목이 no, log_date 가 있습니다.
no = 1
log_date에는 |을 구분자로 사용하여 기간|시작일| 종료일 이런식으로 데이터가 들어갑니다.
그리고 개행문자(\n)도 포함되어 있습니다.
즉, log_date에는
30|2022-11-01 10:10:00|2022-11-05 12:00:00
40|2022-11-07 10:10:00|2022-11-10 12:00:00
60|2022-11-15 10:10:00|2022-11-23 12:00:00
이런식으로 들어갑니다.
s_log테이블에서 40에 해당하는 2022-11-07 10:10:00와 2022-11-10 12:00:00 를 가져오려면 sql문을 어떻게 해야 할까요?
답변 5개
이런거 말씀하시는거 맞나모르겠네요
SELECT
substring,
SUBSTRING_INDEX(substring, '|', 1) as day1,
SUBSTRING_INDEX(SUBSTRING_INDEX(substring, '|', -2),'|', 1) as day2
FROM
(SELECT REPLACE(REGEXP_SUBSTR ('30|2022-11-01 10:10:00|2022-11-05 12:00:00
40|2022-11-07 10:10:00|2022-11-10 12:00:00
60|2022-11-15 10:10:00|2022-11-23 12:00:00', '40\\|([^\r\n]+)'), '40|', '') AS substring) A
댓글을 작성하려면 로그인이 필요합니다.
| no | log_date |
| 1 |
30|2022-11-01 10:10:00|2022-11-05 12:00:00 40|2022-11-07 10:10:00|2022-11-10 12:00:00 60|2022-11-15 10:10:00|2022-11-23 12:00:00 |
이렇게 되어있을때 40에 해당하는 2022-11-07 10:10:00와 2022-11-10 12:00:00 를 가져오는 쿼리가 가능할까요?
가능하지 않을 것 같기도 하고....
php 코드로 해야 할것 같습니다.
답변주신분들 고맙습니다.
답변에 대한 댓글 2개
컬럼을 분리하시는 것이 좋을 듯합니다.
댓글을 작성하려면 로그인이 필요합니다.
추가 피해자 방지 https://sir.kr/conflictconsultation/245" rel="nofollow noreferrer noopener" target="_blank">https://sir.kr/conflictconsultation/245
댓글을 작성하려면 로그인이 필요합니다.
문장전체를 보는경우
단순하게
select * from s_log
where log_date = '40|2022-11-07 10:10:00|2022-11-10 12:00:00'
이렇게 해도 되지만
시간이 범위로 해당되는경우이거나 일부분만 일치하는것을 가져올때는
검색할 값을 변수로 관리하고
instr(컬럼, {$변수})
로 검색하시면됩니다.
</p>
<p><?php</p>
<p>$searchvar = "40|2022-11-07"; // 이 내용은 부분적으로 작성되도 like 검색과 같이 작동합니다.</p>
<p>$sql = "select * from s_log where instr(log_date, '{$searchvar}') ";</p>
<p> </p>
<p>
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인