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 3563 게시물 읽기
No. 3563
문자열을 날자형과 비교하려고 하는데.....
작성자
날샛다
작성일
2007-06-09 00:50:06
조회수
8,916

SDATE라는 필드가 Datetime형으로 필드에는 2007-05-29 오후 1:29:57 이렇게 저장 됩니다.
저장된 SDATE라는 필드에서 특정날자 2007-05-30 오전 11:00:00(이 아이는 문자열입니다....)보다 큰 필드만 구하려고 하는데
datatime으로 바꾸는데 실패했습니다 라는 에러만 뜨네요..

쿼리는 아래와 같이 하였습니다...

SELECT isnull(sum(convert(money,MY_MONEY)),0) From 테이블명 where MY_ID='"&mem_id&"' and SDATE > convert(datetime, '"&lastdate&"', 120) GROUP BY MY_ID

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

dateTime으로 바꿀때의 에러는 대부분 
20070632 등 날짜가 아닌 데이터의 converting에서 발생하는 것입니다.

.님이 2007-06-09 10:14:36에 작성한 댓글입니다. Edit
SELECT isnull( sum( convert( money, MY_MONEY ) ), 0 )
  FROM 테이블명
 WHERE MY_ID = '" & mem_id & "'
   AND SDATE > CONVERT( DATETIME, '" &lastdate & "', 120 )
 GROUP BY MY_ID


lastdate 변수에 들어가는 시간을 24시간 타입으로 변경해서 하시면 해결 될거라는...

그리고 간단하게 테스트 해보시면 알 수 있는게...

변수 대신 숫자로 나열해보세요.

실제로 

AND SDATE > CONVERT( DATETIME, '2007-05-30 오전 11:00:00', 120 )

윗줄이 처리되는지 직접 넣어보세요. 그럼 이유를 아실수 있겠죠?

시간을 AMPM 형식이 아니라 24시간 타입으로 넣으시면 정상적으로 동작 할겁니다.
임재흥(임재흥)님이 2007-06-11 09:22:48에 작성한 댓글입니다.

asp 나 다른 어플리케이션에서 datetime 형식을 형변형 없이 select 하게 되면 '2006-09-08 오전 12:20:23'  같은 형태로 나옵니다. 이것을 datetime 으로 convert 할때 일반적인 convert 를 하게 되면 오류가 발생하게됩니다.


select convert(datetime,'2006-09-08 오전 12:20:23')


-----------------------

메시지 241, 수준 16, 상태 1, 줄 1

문자열을 datetime으로 변환하지 못했습니다.


이는 SQLServer에서 지원하는 시간형식이 아니기 때문입니다. 다음과 같이 변형을 시켜주면 datetime으로 변형이 가능합니다. 또한 오전,오후의 정의는 오전 12시 와 오후 12시 어떤게 정오인가 하는 문제는 아래의 BOL에 정의를 따르면 됩니다.


declare @t varchar(50)

set @t = '2006-09-08 오전 12:20:23'


select convert(datetime,stuff(@t,11,3,'') + case right(left(@t,13),2) when '오전'  then 'AM'  else 'PM'  end)


-----------------------

2006-09-08 09:20:23.000


(1개 행 적용됨)



다음은 BOL의 시간 형식에 대한 정의 입니다.


시간 형식


Microsoft® SQL Server™ 2000은 다음과 같은 시간 데이터 형식을 인식합니다. 각 형식을 작은따옴표(')로 묶으십시오.


14:30


14:30[:20:999]

14:30[:20.9]

4am

4 PM

[0]4[:30:20:500]AM


AM 또는 PM 접미사를 지정하여 시간 값이 정오 12시 이전인지 이후인지를 나타낼 수 있습니다. AM 또는 PM의 대소문자는 구분하지 않습니다.


시간은 12시간제 또는 24시간제로 지정할 수 있습니다. 다음은 시간 값을 해석하는 방법입니다.


시간 값 0은 AM 지정 여부에 관계 없이 오전(AM)을 나타냅니다. 시간 값 0을 사용할 때는 PM을 지정할 수 없습니다.


1부터 11까지의 시간 값은 AM 또는 PM을 지정하지 않아도 오전을 나타냅니다. 또한 AM을 지정하면 오전을 나타내고 PM을 지정하면 오후를 나타냅니다.


시간 값 12는 AM 또는 PM을 지정하지 않는 경우 정오 이후의 시간을 나타냅니다. AM을 지정하면 자정 이후의 시간을 나타내고 PM을 지정하면 정오 이후의 시간을 나타냅니다. 예를 들어, 12:01과 12:01 PM은 정오에서 1분 지난 시간이고, 12:01 AM은 자정에서 1분 지난 시간입니다. 12:01 AM을 지정하면 00:01 또는 00:01 AM과 같습니다.


13부터 23까지의 시간 값은 AM 또는 PM을 지정하지 않는 경우 정오 이후의 시간을 나타냅니다. 또한 PM을 지정해도 정오 이후의 시간을 나타냅니다. 13부터 23까지의 시간 값을 사용할 때는 AM을 지정할 수 없습니다.

최석준(beatchoi)님이 2007-06-11 15:28:50에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
3566exec sp_executesql 질문입니다
권용재
2007-06-12
2806
3565LDF파일 파일용량 줄이기. [1]
김민호
2007-06-11
3110
3564tempdb.mdf 파일 크기
초보
2007-06-11
2187
3563문자열을 날자형과 비교하려고 하는데..... [3]
날샛다
2007-06-09
8916
3561쿼리해석.. [1]
초보
2007-06-08
2163
3559초보입니다~ [1]
왕초보
2007-06-07
2063
3558요일카운터 [2]
초보
2007-06-07
3695
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.089초, 이곳 서비스는
	PostgreSQL v11.3으로 자료를 관리합니다