안녕하세요! mssql2005 궁금한게 있어서 질문 올립니다! 0 4 1,299

by 김성진 [SQLServer] substr 시간 자르기 [2021.05.25 11:21:52]


시간자르기.PNG (47,358Bytes)

                       SELECT 
                TOP 1  *
            FROM ( SELECT ROW_NUMBER() OVER (ORDER BY measurement_date DESC,SUBSTRING(measurement_time,4,3) DESC ) AS rownum 
                      , CASE device_plot
                        WHEN  '11' THEN 'Plot1'
                        WHEN  '22' THEN 'Plot2'
                        WHEN  '33' THEN 'Plot3'
                        WHEN  '44' THEN 'Plot4'
                        WHEN  '55' THEN 'Plot5'
                        WHEN  '66' THEN 'Plot6'
                        ELSE '' END AS deviceplot
                               , CONVERT(CHAR(10), CONVERT(DATETIME, measurement_date), 111) measurementdate
                                , STUFF(STUFF(measurement_time, 3, 0, ':'), 6, 0, ':')        measurementtime
                                , ISNULL(CAST(MAX(CASE device_plot_tmb WHEN '1' THEN temperature_value END) AS VARCHAR), '-') temperaturevalueT
                               , ISNULL(CAST(MAX(CASE device_plot_tmb WHEN '2' THEN temperature_value END) AS VARCHAR), '-') temperaturevalueM
                               , ISNULL(CAST(MAX(CASE device_plot_tmb WHEN '3' THEN temperature_value END) AS VARCHAR), '-') temperaturevalueB
                             , ISNULL(CAST(MAX(CASE device_plot_tmb WHEN '1' THEN humidity_value    END) AS VARCHAR), '-') humidityvalueT
                                    , ISNULL(CAST(MAX(CASE device_plot_tmb WHEN '2' THEN humidity_value    END) AS VARCHAR), '-') humidityvalueM
                     FROM smarcle_data_log
                    WHERE 1=1
                         AND device_plot = '11'
                      AND (SUBSTRING(measurement_time,3,2) % 10)=0
                GROUP BY device_plot, measurement_date, measurement_time)a
        ORDER BY measurementdate desc, measurementtime desc
                    

쿼리문 입니다! 

사진 보시면 아래 표출되는 measurementtime에 10시 50분 09초로 찍혀 있습니다 (10:50:09)

이것을 서브스트링으로 잘라서 10시 50분 (10:50:09)--->(10:50) 이렇게 표출을 하고싶은데 서브스트링을 써도 안되네요 쿼리문에 문제가 있나요? 도와주시면 감사하겠습니다!

             , STUFF(STUFF(measurement_time, 3, 0, ':'), 6, 0,'')       measurementtime  이 부분을 left로 자르게 되면 오류가 납니다...

 

            , STUFF(STUFF(measurement_time, 3, 0, ':'), 6, 0,'')   LEFT(measurementtime,4)                    

by 김성진 [2021.05.25 13:33:44]

해결 하였습니다!


by 마농 [2021.05.27 09:38:52]

1. 왜 알리아스에다가 LEFT 를 붙이나요?
- ":" 까지 감안하면 숫자도 4가 아닌 5가 되어야 하구요.
- STUFF(6,0) 이 아닌 STUFF(6,2) 를 했다면? LEFT 도 필요 없죠.
- 아니면 두번째 STUFF 쓰지 말고 그냥 LEFT 해도 되구요.
- 변경전 : , STUFF(STUFF(measurement_time, 3, 0, ':'), 6, 0, '') LEFT(measurementtime, 4)
- 변경후 : , LEFT(STUFF(STUFF(measurement_time, 3, 0, ':'), 6, 0, ''), 5) measurementtime
- 개선1 : , STUFF(STUFF(measurement_time, 3, 0, ':'), 6, 2, '') measurementtime
- 개선2 : , LEFT(STUFF(measurement_time, 3, 0, ':'), 5) measurementtime
 


by 김성진 [2021.06.01 13:48:13]

감사합니다! 덕분에 잘 해결하였습니다!


by 김성진 [2021.06.01 13:52:54]

항상 마농님 덕분에 잘 배워갑니다! 감샇바니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입