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
문장전체를 보는경우
단순하게
select * from s_log
where log_date = '40|2022-11-07 10:10:00|2022-11-10 12:00:00'
이렇게 해도 되지만
시간이 범위로 해당되는경우이거나 일부분만 일치하는것을 가져올때는
검색할 값을 변수로 관리하고
instr(컬럼, {$변수})
로 검색하시면됩니다.
<?php
$searchvar = "40|2022-11-07"; // 이 내용은 부분적으로 작성되도 like 검색과 같이 작동합니다.
$sql = "select * from s_log where instr(log_date, '{$searchvar}') ";
where substring(log_date,1,2)='40'
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 코드로 해야 할것 같습니다.
답변주신분들 고맙습니다.