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
운영게시판
최근게시물
Sybase Q&A 1122 게시물 읽기
No. 1122
특정월에서. 요일과 날짜 구하기?
작성자
궁금??
작성일
2005-03-28 14:19
조회수
6,998

예을. 들어 2005년03월에 화요일이 몇번이 있으며.. 그날짜는 무슨 무슨 일이다는 결과를

얻을려구 하면 어떻게 해야 합니까??

 

====================================================

2005년 03월의 화요일의 횟수는 총 5번

일짜는 20050301,20050308,20050315,20050322,20050329

====================================================

 

고수님들의 조언 부탁드립니다.. ^^

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

T_DATE 라는 일자를 담은 Table 이 있다라고 가정하면.. 아래 처럼 쉽게 구할 수 있는데.. 없으시면 다른 query 가 필요 하겠네요..

있으실거라 생각하고.. ^^  방법이야 여러 가지가 있겠지만.. datepart 함수 중에 요일을 반환하는 함수를 이용하시면 쉽게 구할수 있을거 같네요..

 

 

begin

 

declare @v_dwcnt int
declare @v_Month char(6)
declare @v_DayCnt int

 

select @v_dwcnt = 3 /* 일요일부터 1 ~ 7 */
select @v_Month = '200503' /* 해당월 */


select @v_DayCnt =  sum( case when datepart(dw,sDateID) = @v_dwcnt then 1 else 0 end)
    from T_DATE
where sMonthID = @v_Month

 

select sDateID , @v_DayCnt
  from T_DATE
where sMonthID = @v_Month
and  datepart(dw,sDateID) = @v_dwcnt

 

end

 

coolrock님이 2005-03-28 22:23에 작성한 댓글입니다. Edit

좋은 방법이군요...

 

그런데.. 테이블은 없습니다.. 시스템에서. 직접 읽어 오는 방법이 없을까요??

 

 

 

답변에 감사드립니다.

궁금?님이 2005-03-29 16:17에 작성한 댓글입니다. Edit

단순 무식한 방법으로 했습니다.

 

 

create proc sp_day  @ym char(6)
as
declare @last_day int
declare @day char(8)--계산을 위한것
declare @cnt int
declare @count_1  int
declare @count_2 int
declare @count_3 int
declare @count_4 int
declare @count_5 int
declare @count_6 int
declare @count_7 int

select @cnt = 1
select @count_1=0
select @count_2=0
select @count_3=0
select @count_4=0
select @count_5=0
select @count_6=0
select @count_7=0


select @last_day=convert(int,datepart(dd,dateadd(dd,-1,dateadd(mm,1,@ym+'01'))))

while @cnt <= @last_day
begin
 if @cnt <10
  select @day=@ym+'0'+convert(char(1),@cnt)
 else select @day=@ym+convert(char(2),@cnt)

 if datepart(dw,@day) = 1
  select @count_1 = @count_1+1
 else if datepart(dw,@day) = 2
  select @count_2 = @count_2+1
 else if datepart(dw,@day) = 3
  select @count_3 = @count_3+1
 else if datepart(dw,@day) = 4
  select @count_4 = @count_4+1
 else if datepart(dw,@day) = 5
  select @count_5 = @count_5+1
 else if datepart(dw,@day) = 6
  select @count_6 = @count_6+1
 else
  select @count_7 = @count_7+1

select @cnt=@cnt+1
end

select @ym+'의 요일 현황'
select convert(char(8),@count_2)  AS '월요일',convert(char(8),@count_3) AS '화요일',
convert(char(8),@count_4) AS  '수요일',convert(char(8),@count_5) AS '목요일' ,
convert(char(8),@count_6) AS '금요일',convert(char(8),@count_7) AS '토요일',
convert(char(8),@count_1) AS '일요일'

 

sp_day '200503'
                  
-                 
200503의 요일 현황

월요일   화요일   수요일   목요일   금요일   토요일   일요일  
------   ------   ------   ------   ------   ------   ------  
4            5           5           5           4            4          4

 

 

특정요일만 찍고 싶으시면 if문 전체 삭제후에, 요일도 변수로 받아야 겠죠

 

if datepart(dw,@day) = @요일

  select @day

이케 하면 해당 요일 날자가 찍히겠죠....

 

수고하세요 

지연님이 2005-03-30 13:08에 작성한 댓글입니다.
이 댓글은 2005-03-30 13:13에 마지막으로 수정되었습니다. Edit

T_DATE Table 이 없다고 하셔서.. 그럼 쉽게 만들어 보았습니다.. ^^

 

create proc sp_day  @ym char(6) , @day int
as
declare @v_start_date char(8)
declare @v_end_date char(8)

select @v_start_date = @ym + '01' /* 해당월 초일 */
select @v_end_date  = convert(char(8),dateadd(mm,1,@v_start_date),112) /* 1달후 초일 */

if exists ( select * from sysobjects where name = '#temp' )                                                                 
    begin                                                                                                         
        drop table #temp
    end  

create table #temp(
sDate char(8),
nDayofWk int
)


while ( @v_start_date != @v_end_date)
 begin
  insert into #temp(
  sDate,
  nDayofWk
  )
  select  @v_start_date,
          datepart(dw,@v_start_date)
  
    select @v_start_date = convert(char(8), dateadd(day,1,@v_start_date),112)
 end

select sDate
from #temp
where nDayofWk = @day

select count(*) from #temp where nDayofWk = @day

 

하시고..

sp_day '200503', 2 를 실행하시면..

 

 

sDate   
-----   
20050307
20050314
20050321
20050328

           
-----------
          4

 

이렇게 나오네요.. ^^

 

   

coolrock님이 2005-03-30 13:47에 작성한 댓글입니다.
이 댓글은 2005-03-31 16:04에 마지막으로 수정되었습니다. Edit

답변에 감사드립니다....

 

 

큰 도움 받았습니다. 다시한번 감사드립니다.

 

궁금 ^^님이 2005-04-06 10:07에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1125sysindexes란 무엇을 하는 테이블 인가요? [2]
정태환
2005-03-29
4662
1124bcp에서 row수를 리턴 받을수 있나요? [2]
사이베이스
2005-03-29
3644
112312.5.1.인스톨하고 Adaptive server configuration fail 이 납니다. [1]
정영식
2005-03-29
3611
1122특정월에서. 요일과 날짜 구하기? [5]
궁금??
2005-03-28
6998
1121ASA 9.0도 커서 지원하나요? [1]
왕초보
2005-03-26
4118
1120errorlog 좀 봐주십시오 [1]
에러난
2005-03-26
4034
1119칼럼을 추가하고싶어요 [3]
왕초보
2005-03-24
4514
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.024초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다