mysql에서 쿼리 질문입니다.

mysql에서 쿼리 질문입니다.

QA

mysql에서 쿼리 질문입니다.

답변 5

본문

테이블 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}') ";
 
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 코드로 해야 할것 같습니다. 

답변주신분들 고맙습니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 1,543
© SIRSOFT
현재 페이지 제일 처음으로