2009-11-12 3 views
2
내가 SQL에서 이런 일을 할 필요가

와 루프 동안 : SQL 날짜 카운터

declare @StartDate varchar(10) 
declare @EndDate varchar(10) 
set @StartDate='12/31/2008' 
set @EndDate='1/11/2009' 

Declare @date varchar = @StartDate 
while (@date <= @EndDate) 
begin 
-- some statements 
set @date += 1 -- basically increment by 1 day 
end 

어떻게 SQL에서 제대로 위를 할 수 있습니까? 기본적으로 내 시작일과 종료일은 문자열이며 날짜가 아니라 다른 비즈니스 타임의 테이블입니다.하지만 열의 이름을 날짜로 사용하는 다른 테이블의 문자열 열을 참조하고 있습니다. 그러나 여러 열을 반복해야합니다. 각 열은 다음날 날짜.

날짜가 11/07/2009 인 경우 열의 이름은 '11/7/2009 '(7은 0이 아님)이므로주의해야합니다.

도움을 주시면 감사하겠습니다.

감사합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 datetime에 관한 또 다른 질문을 올렸다. – Prabhu

답변

5

날짜 매개 변수를 datetime으로 변환 할 수 있습니다.

SELECT convert(datetime, @StartDate) into datetimevariable 

날짜 기능을 사용하여 날짜를 추가 할 수 있습니다. 년/월/일 형식을 얻을 수있는 솔루션으로

select DATEADD(day,1,datetimevariable) into datetimevariable 

, I & P 주 전에 일부 웹 사이트에서이 기능 (C). 이 방법으로 함수를 만들려면이 코드를 사용하여 전화 :

SELECT dbo.fnFormatDate (@DateTimeVariable, 'M/DD/YYYY') into stringVariable 

CREATE FUNCTION dbo.CustomFormatDate (@Datetime DATETIME, @FormatMask VARCHAR(32)) 
RETURNS VARCHAR(32) 
AS 
BEGIN 

    DECLARE @StringDate VARCHAR(32) 
    SET @StringDate = @FormatMask 
    IF (CHARINDEX (‘YYYY’,@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, ‘YYYY’, 
         DATENAME(YY, @Datetime)) 
    IF (CHARINDEX (‘YY’,@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, ‘YY’, 
         RIGHT(DATENAME(YY, @Datetime),2)) 
    IF (CHARINDEX (‘Month’,@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, ‘Month’, 
         DATENAME(MM, @Datetime)) 
    IF (CHARINDEX (‘MON’,@StringDate COLLATE SQL_Latin1_General_CP1_CS_AS)>0) 
     SET @StringDate = REPLACE(@StringDate, ‘MON’, 
         LEFT(UPPER(DATENAME(MM, @Datetime)),3)) 
    IF (CHARINDEX (‘Mon’,@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, ‘Mon’, 
            LEFT(DATENAME(MM, @Datetime),3)) 
    IF (CHARINDEX (‘MM’,@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, ‘MM’, 
        RIGHT(‘0′+CONVERT(VARCHAR,DATEPART(MM, @Datetime)),2)) 
    IF (CHARINDEX (‘M’,@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, ‘M’, 
         CONVERT(VARCHAR,DATEPART(MM, @Datetime))) 
    IF (CHARINDEX (‘DD’,@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, ‘DD’, 
         RIGHT(‘0′+DATENAME(DD, @Datetime),2)) 
    IF (CHARINDEX (‘D’,@StringDate) > 0) 
     SET @StringDate = REPLACE(@StringDate, ‘D’, 
            DATENAME(DD, @Datetime)) 

RETURN @StringDate 
END 
GO 
+0

감사합니다. 어떻게 특정 형식 VARCHAR하는 날짜 변환을 수행합니다 선언 @StartDate의 날짜 세트 @ STARTDATE = '12/07/2008 ' 선언 @StartDateString VARCHAR (10) 당신이 동일한에 @StartDateString 설정하는 방법' 12/7/2008 ' 감사합니다. – Prabhu

+0

datetime에서 세 번째 매개 변수가있는 문자열로 변환하도록 변환을 호출 할 수 있습니다. 이 param는 형식을 나타내는 int입니다. 다음 링크를 확인하십시오. http://msdn.microsoft.com/es-es/library/ms187928.aspx – Jonathan

+0

Thanks Jonathan. 불행히도 101은 가장 가까운 형식 인 \t mm/dd/yyyy입니다. 그러나 m/d/yyyy가 필요합니다. – Prabhu

1

사용 DATEADD, 다음 cast을 다시 문자열로 귀하의 경우 101처럼 선택의 형식을 사용하여 :

set @date = convert(varchar(30), dateadd(day,1, @date), 101); 
1

나는 조나단이 이미 말했던 방식을 선호하지만 루프에 datetime 변수를 사용하고 DATEADD 기능으로 하루를 추가합니다. 열에 액세스하려면 CONVERT 또는 CAST 문을 사용할 수 있지만 이제 varchar를 가져올 수 있습니다 (예 : CAST (@date as varchar (10)). 특별한 형식이 필요한 경우에는 cast (day (@date)와 varchar (2)) + '/'+ cast (월 (@date) varchar (2) + '/'+ cast 올해 (@ 날짜) varchar (4)로) 이것은 당신이 언급 한대로 '0'을 제거합니다.