database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6814 게시물 읽기
No. 6814
문자열을 날짜 및/또는 시간으로 변환하지 못했습니다 도와주세요~~~
작성자
sql초보
작성일
2014-05-20 14:45ⓒ
2014-05-21 10:40ⓜ
조회수
19,489

고수님들의 도움이 필요합니다.

해당 테이블의 inout_time 이라는 필드에는
기본적으로 날자(yyyymmdd) + 시간(hhmm) = 12자리의 데이타가 들어가지만
경우에 따라서 날짜와 시간 형식을 갖추지 못한 데이타도 들어가게 됩니다.

[원하는결과]
날짜형식을 갖춘 자료중에서
현재의 시간과 inout_time의 5시간전 비교하여

SELECT count(*), Min(st_name) 하고 싶은데...  아래와같이 코딩을 했더니 에러가 납니다.

 

[코딩]
SELECT count(*), Min(st_name)
From   cheduleTB
Where (ISDATE(substring(inout_time,1,4) + '-' + substring(inout_time,5,2) + '-' + substring(inout_time,7,2) + ' ' + substring(inout_time,9,2) + ':' + substring(inout_time,11,2) + ':00') = 1)
 and  (GETDATE() > dateadd(hour,-5,convert(datetime,substring(inout_time,1,4) + '-' + substring(inout_time,5,2) + '-' + substring(inout_time,7,2) + ' ' + substring(inout_time,9,2) + ':' + substring(inout_time,11,2) + ':00', 20)) )

 

이 글에 대한 댓글이 총 7건 있습니다.

-- 대충 이러면 되지 않을까..

 

SELECT count(*), Min(st_name)
FROM (
SELECT input_time, st_name
From   cheduleTB 
Where (ISDATE(substring(inout_time,1,4) + '-' + substring(inout_time,5,2) + '-' + substring(inout_time,7,2) + ' ' + substring(inout_time,9,2) + ':' + substring(inout_time,11,2) + ':00') = 1)
) AS tt
WHERE (GETDATE() > dateadd(hour,-5,convert(datetime,substring(inout_time,1,4) + '-' + substring(inout_time,5,2) + '-' + substring(inout_time,7,2) + ' ' + substring(inout_time,9,2) + ':' + substring(inout_time,11,2) + ':00', 20)) )
;
우욱님이 2014-05-20 18:09에 작성한 댓글입니다.
이 댓글은 2014-05-20 18:10에 마지막으로 수정되었습니다. Edit

우욱님 감사합니다.

그래도 여전히 WHERE (GETDATE() > dateadd(hour,-5,convert(datetime,substring(inout_time,1,4) + '-' + substring(inout_time,5,2) + '-' + substring(inout_time,7,2) + ' ' + substring(inout_time,9,2) + ':' + substring(inout_time,11,2) + ':00', 20)) ) 에서

 

메시지 241, 수준 16, 상태 1, 줄 1
문자열을 날짜 및/또는 시간으로 변환하지 못했습니다.
라는 에러를 토해냅니다

 

SELECT에  dateadd(hour,-5,convert(datetime,substring(inout_time,1,4) + '-' + substring(inout_time,5,2) + '-' + substring(inout_time,7,2) + ' ' + substring(inout_time,9,2) + ':' + substring(inout_time,11,2) + ':00', 20)) 를 주면 정상적으로 값을 계산해 오지만 Where절에 주기만 하면 에러가 납니다. 뭐가 문제일까요

 

sql초보님이 2014-05-21 10:39에 작성한 댓글입니다.
이 댓글은 2014-05-21 10:39에 마지막으로 수정되었습니다. Edit

일단 inout_time 예를 두어개 줘보시죠..
시간형식인 것과 그렇지 않은 것으로요.

가능하면 st_name도.. ㅋ

우욱님이 2014-05-21 10:53에 작성한 댓글입니다. Edit

-- 바쁜 척하다가 오전 업무 대충 마무리 해놓고 다시 보니
-- GETDATE() < ~~~ 이 부분이 이제서야 눈에 들어오네요.. -_-;;

SELECT count(*), Min( st_name )
From   cheduleTB 
Where CASE WHEN 1 = ISDATE(substring(inout_time,1,4) + '-' + substring(inout_time,5,2) + '-' + substring(inout_time,7,2) + ' ' + substring(inout_time,9,2) + ':' + substring(inout_time,11,2) + ':00') 
THEN
DATEDIFF(mi, GETDATE(),  dateadd(hour,-5,convert(datetime,substring(inout_time,1,4) + '-' + substring(inout_time,5,2) + '-' + substring(inout_time,7,2) + ' ' + substring(inout_time,9,2) + ':' + substring(inout_time,11,2) + ':00', 20)) ) 
ELSE
1
END < 0
;
우욱님이 2014-05-21 11:31에 작성한 댓글입니다. Edit

우욱님 관심가져 주심에 감사드립니다.

해결했습니다^^


조건절에 Where (ISDATE(substring(inout_time,1,4) + '-' + substring(inout_time,5,2) + '-' + substring(inout_time,7,2) + ' ' + substring(inout_time,9,2) + ':' + substring(inout_time,11,2) + ':00') = 1) and ((LEN(LTRIM(RTRIM(isnull(inout_time,'')))) = 12) and (ISNUMERIC(inout_time) = 1))

빨간색부분을 추가했더니 해결되었습니다.

다시한번 감사드립니다.

꾸벅~~~

sql초보님이 2014-05-21 11:58에 작성한 댓글입니다. Edit

뻘건색 부분을 추가하셨을때 문제 없이 수행이 되실 수가 있기는 해도 
short-circuit에 의존하는 것은 바람직하지 않다는 것이 제 "개인적인 의견"입니다.
(참조: http://blogs.msdn.com/b/bartd/archive/2011/03/03/don-t-depend-on-expression-short-circuiting-in-t-sql-not-even-with-case.aspx )

물론 이것에 반해서 short-circuit 방식이 CPU를 아낄 수 있다는 의견도 있기는 합니다.
(참조: http://sqlmag.com/t-sql/short-circuit )

 

우욱님이 2014-05-21 13:45에 작성한 댓글입니다. Edit

우욱님 조언 감사합니다^^

sql초보님이 2014-05-21 15:48에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6817데이타 가로 출력 문의 [4]
아바아바
2014-05-27
8674
6816SP1 -> SP2 업데이트 시 오류입니다.
이홍섭
2014-05-26
8081
6815합계를 구하는게 아니고 단순히 행을 열로 바꾸고 싶습니다. [1]
초보
2014-05-22
8899
6814문자열을 날짜 및/또는 시간으로 변환하지 못했습니다 도와주세요~~~ [7]
sql초보
2014-05-20
19489
6813절감액을 구하고 싶습니다. [2]
초짜
2014-05-19
7799
6812가변적이 가로 데이터를 세로로 출력하고 싶습니다. [2]
궁금이
2014-05-16
10601
6811특정문자 찾기 [2]
궁금이
2014-05-16
9581
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다