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 1247 게시물 읽기
No. 1247
이것좀 봐주실수 있으실런지요?
작성자
초보
작성일
2004-03-17 14:00
조회수
4,665

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO


-- =============================================
-- ALTER  table function (TF)
-- =============================================

ALTER           FUNCTION fn_prd_calendar
(
       @AS_FRDT CHAR(8),
       @AS_TODT CHAR(8)
)
RETURNS @prd_calendar TABLE
(
        DAY1    CHAR(8) ,
        DAY2    CHAR(8) ,
        DAY3    CHAR(8) ,
        DAY4    CHAR(8) ,
        DAY5    CHAR(8) ,
        DAY6    CHAR(8) ,
        DAY7    CHAR(8)

)
AS
BEGIN

DECLARE @DAY      CHAR(8) ,
        @AN_COUNT NUMERIC

SET @AN_COUNT = 0

WHILE (@DAY = @AS_TODT)

SELECT @DAY = CONVERT(CHAR(8) , DATEADD(DAY , @AN_COUNT , @AS_FRDT) , 112)

INSERT @prd_calendar VALUES (CASE WHEN @AN_COUNT = 0 THEN @DAY ELSE NULL END ,
                             CASE WHEN @AN_COUNT = 1 THEN @DAY ELSE NULL END ,
                             CASE WHEN @AN_COUNT = 2 THEN @DAY ELSE NULL END ,
                             CASE WHEN @AN_COUNT = 3 THEN @DAY ELSE NULL END ,
                             CASE WHEN @AN_COUNT = 4 THEN @DAY ELSE NULL END ,
                             CASE WHEN @AN_COUNT = 5 THEN @DAY ELSE NULL END ,
                             CASE WHEN @AN_COUNT = 6 THEN @DAY ELSE NULL END )
SET @AN_COUNT = @AN_COUNT + 1

RETURN
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

 

시작일과 종료일을 넣으면 시작일부터 종료일까지 일자가 생성되게 하려고 합니다.

값도 증가하지 않고 모든 컬럼에 null이 들어갑니다.

일단 테스트를 해보려고 DAY@가 종료일자(@AS_TODT)와 같을때까지 반복을 하려는데도.

안되더라구요.

MS-SQL은 첨해보는거라서...(오라클도 잘 하는건 아니지만요..ㅠㅠ) 도와주세요...

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

위의 쿼리에선 null 에 대한 비교가 안되고, insert 시 한행씩 추가되지 한 column 씩 추가되지 않아 원하는 값이 나오지 않읍니다.

 

create FUNCTION fn_prd_calendar
(
       @AS_FRDT CHAR(8),
       @AS_TODT CHAR(8)
)
RETURNS @prd_calendar TABLE
(
        DAY1    CHAR(8) ,
        DAY2    CHAR(8) ,
        DAY3    CHAR(8) ,
        DAY4    CHAR(8) ,
        DAY5    CHAR(8) ,
        DAY6    CHAR(8) ,
        DAY7    CHAR(8)
)
AS
BEGIN

DECLARE @DAY      CHAR(8) ,
               @day1     char(8) ,
               @day2     char(8) ,
               @day3     char(8) ,
               @day4     char(8) ,
               @day5     char(8) ,
               @day6     char(8) ,
               @day7     char(8) ,
               @AN_COUNT int

SET         @AN_COUNT = 1
set          @day      = ''

WHILE  (@DAY < @AS_TODT)
begin
       if (@an_count % 7 = 1)
          select @day1 = null, @day2 = null, @day3 = null, @day4 = null, @day5 = null, @day6 = null, @day7 = null

       SELECT @DAY = CONVERT(CHAR(8) , DATEADD(DAY , @AN_COUNT -1 , @AS_FRDT) , 112)

       select @day1 = (case when @an_count % 7 = 1 then @day else @day1 end),
              @day2 = (case when @an_count % 7 = 2 then @day else @day2 end),
              @day3 = (case when @an_count % 7 = 3 then @day else @day3 end),
              @day4 = (case when @an_count % 7 = 4 then @day else @day4 end),
              @day5 = (case when @an_count % 7 = 5 then @day else @day5 end),
              @day6 = (case when @an_count % 7 = 6 then @day else @day6 end),
              @day7 = (case when @an_count % 7 = 0 then @day else @day7 end)

       if (@an_count % 7 = 0)
           insert @prd_calendar values (@day1, @day2, @day3, @day4, @day5, @day6, @day7)          
       else
           begin
             if (@DAY = @AS_TODT)
                 insert @prd_calendar values (@day1, @day2, @day3, @day4, @day5, @day6, @day7)               
           end

       SET @AN_COUNT = @AN_COUNT + 1
end

RETURN
END

GO

select * from fn_prd_calendar('20030311','20030912')  --검색문
go

drop function fn_prd_calendar  --함수 삭제
go

t_1234님이 2004-03-17 23:06에 작성한 댓글입니다.
이 댓글은 2004-03-17 23:19에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1250MSSQL데이터타입 정리된 것 없나요?(mysql로의 마이그레이션때문에) [1]
하야로비
2004-03-23
3823
1249조인문....정말 어렵네요 도와주세요 [1]
박인혁
2004-03-18
3606
1248성공적으로 인서트 되었는지를 알 수 있는... [1]
초보
2004-03-17
3313
1247이것좀 봐주실수 있으실런지요? [1]
초보
2004-03-17
4665
1246[질문]999를 0000999 로 바꾸려면 어떻게 해야 하나여? [1]
최재영
2004-03-17
3929
1245팀별 SUM 중 한 행으로 처리가 안됩니다. [3]
박종덕
2004-03-16
4107
1244zeos를 사용 Delphi로 mssql연결작업시...
수니
2004-03-16
4090
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다