SQL질문을 또 가져왔습니다. ㅠ
ZPM0422T라는 테이블에 8자리 날짜필드(GNYMD)가 있습니다.
제가 조회하는 조건은 연도와 월뿐입니다.
그래서 2008.07로 조회조건을 넣어주면 2008년 7월에 해당하는 DATA는 다 가져와야 하는데요.
조건날짜가 매번 바뀌니 고정적으로 할수도 없는 노릇이고...;;
GNYMD >= 월초 AND GNYMD =< 월말.....................이 방법???
SQL문 자체에서
GNYMD+0(6) = LV_MONTH......................LV_MONTH(200807)이런식의 표현이 가능한 구문은 없을까요?
댓글 3
-
아밥맨
2008.07.29 19:02
-
페리
2008.07.29 19:20
TABLES ZTWJ010.
DATA: D_DATE(100),
LV_MONTY LIKE SY-DATUM.
DATA: ITAB LIKE ZTWJ010 OCCURS 0 WITH HEADER LINE.
LV_MONTY = SY-DATUM+0(6).
CONCATENATE 'D LIKE ''' LV_MONTY '%''' INTO D_DATE.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM ZTWJ010
WHERE (D_DATE).
동적으로 가져오는 방법도 있긴 합니다 :D
-
옆집남자
2008.07.29 19:52
조회조건이 연도와 월이면 예를 들어(200807) 이라면...(날짜 입력필드가 p_date 라면.)
구하고자 하는 것은 2008.07.01~ 2008.07.31일 이겠죠.
2008.07.01은.. concatenate p_date '01' into from_date.
2008.07.31은
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
DAY_IN = from_date
IMPORTING
LAST_DAY_OF_MONTH = OUT_DATE <-----요기에 그 해 그 달의 마지막날 나옵니다.
EXCEPTIONS
DAY_IN_NO_DATE = 1
OTHERS = 2.
8자리 날짜필드(YYYYMMDD)에서 6자리 년월(YYYYMM)만 가져오고 싶다는 의미죠?
오픈SQL에서 Substring은 지원하지 않습니다..
NATIVE SQL은 가능하지만요..
번거로워도 인터널테이블에서 가공하는 방법밖에 없을 듯 보이네요.