2009-07-15 10 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 

1日の一部を表示されますように日付列の月とYYの部分を表示しようとしていますに保存された日付を並べ替える方法

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

おかげで、 サグを:それは「4月9日」として表示され、まだそれがのように見えるように、日付でソートすることができるように食い物にされなければなりません。

+0

列データ型が「日付」(SQL 2008)で、データをUS形式または入力形式で表示していますか?それとも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 

しかし、私はあなたの代わりに、データベース内の日時値として日付を格納することを示唆している、とあなたが表示するときの書式設定の世話をしますその価値。そうすれば、それらをデータベースで簡単に並べ替えることができます(また、2つの日付の違いを得るような他の処理も行います)。

日時の値から、簡単に目的の形式を取得できます。 .NETでは、たとえば、theDate.ToString("MMM yy")を使用して、日付を必要なだけ正確に書式設定します。データベースからデータを取得した後に書式設定を行うと、書式がテキストでソートできないという問題はありません。

+0

私はメインフレームデータベースとかなり相互作用するSQL Serverデータベースを扱い、日付は常にYYYYMMDD(それが受け入れることができる唯一の日付形式)の形式で文字列として前後に渡されます。これは実際にソートに適しており、他の日付形式の間で簡単に前後に変換することができます。 – BBlake

+0

@BBlake:はい、その形式は原則的に最も重要な値を持ち、固定サイズの値を使用するため、ソート可能です。あなたはそれらを解析せずにはるかに多くをすることはできません。 – Guffa

関連する問題