2009-07-15 6 views
0

나는 그것이이 날짜에서포맷하고 NVARCHAR

원본 형태로

Apr 12 2009;   
Feb 20 2009; 
Dec 24 2008; 
May 18 2009; 
Jan 8 2009; 
Dec 6 2008; 
Apr 19 2009; 
Jan 4 2009; 
May 13 2009; 
Jan 5 2009 

에게 일 부분을 표시해야하도록 날짜 열 달과 YY 부분을 표시하려고에 저장된 날짜를 정렬하는 방법

Dec 08; 
Jan 09; 
Feb 09; 
Mar 09; 
Apr 09; 
May 09 

감사합니다, 처짐을 : 그것은 "4월 9일"로 표시하고 여전히 다음과 같이 나타납니다 있도록 날짜별로 정렬 될 수 있도록 찢어해야합니다.

+0

열 데이터 형식이 "날짜"(SQL 2008)이고 데이터를 미국 형식 또는 입력 형식으로 표시 했습니까? 또는 varchar로 저장되어 있습니까? – gbn

+0

@ gbn, OP가 nvarchar에 "mon d yyyy"를 저장합니다. –

+0

아, 예 "date"는 "April 23, 2009"과 다르게 나타납니다. 죄송합니다. 늦었습니다 ... – gbn

답변

0

LEFT 함수가 필요하며 SQL Server에서 datetime 또는 smalldatetime을 정렬 할 수 있습니다. 당신은이 SQL Server에 대한 ... 시도되는 데이터베이스 말을하지 않습니다

0

:

declare @x table (datestring nvarchar(30)) 
insert into @x values ('Feb 20 2009') 
insert into @x values ('Dec 24 2008') 
insert into @x values ('May 18 2009') 
insert into @x values ('Jan 8 2009') 
insert into @x values ('Dec 6 2008') 

select * from @x 

SELECT 
    LEFT(CONVERT(varchar(30),convert(datetime,datestring),109),3)+' '+SUBSTRING(CONVERT(varchar(30),convert(datetime,datestring),121),3,2) 
    FROM @x 
    ORDER BY CONVERT(datetime,datestring) 

당신은 문자열에 날짜를 저장하지 말아야, 그것은 더 많은 공간을 소요하고하는 것이 어려워 그들을 정렬하고 비교하십시오.

2

날짜를 문자열로 데이터베이스에 저장하려면 ISO-8601 표준과 동일한 원칙을 기반으로하는 형식을 사용해야합니다. 즉, 월을 사용하고 가장 중요한 값을 먼저 배치해야합니다.

은 값이 같은 볼 필요가 텍스트로 정렬 할하려면 대신 데이터베이스에 날짜 값으로 날짜를 저장하는 것이

08-12, 09-01, 09-02, 09-03, 09-04, 09-05 

그러나, 내가 제안을하고 표시 할 때 형식 돌봐 값. 그렇게하면 데이터베이스에서 쉽게 정렬 할 수 있습니다 (또한 두 날짜의 차이를 얻는 것과 같은 다른 처리도 수행).

datetime 값에서 원하는 형식을 쉽게 얻을 수 있습니다. 예를 들어 .NET에서는 theDate.ToString("MMM yy")을 사용하여 원하는 날짜 형식을 정확하게 지정할 수 있습니다. 데이터베이스에서 데이터를 가져온 후에 형식을 지정하면 형식이 텍스트로 정렬 할 수 없다는 것이 문제가되지 않습니다.

+0

저는 메인 프레임 데이터베이스와 상당히 상호 작용하는 SQL Server 데이터베이스로 작업하며 날짜는 항상 YYYYMMDD 형식의 문자열로 전달됩니다 (받아 들일 수있는 유일한 날짜 형식). 이것은 실제로 정렬에 효과적이며 다른 날짜 형식간에 앞뒤로 쉽게 변환 할 수 있습니다. – BBlake

+0

@BBlake : 그렇습니다. 그 형식은 원칙적으로 가장 중요한 값을 가지고 고정 된 크기 값을 사용하기 때문에 정렬 가능합니다. 당신은 그들을 파싱하지 않고도 더 많은 것을 할 수 없습니다. – Guffa

관련 문제