質問

私は、同じ列でソートされます日付列とは別の年と月を必要としています。

私は(YYYY / MM / DD)のような値を持つ日付coulmnを持っている。

2007/11/7
2007/1/8
2007/11/4
2007/12/3
2008/10/4
2009/11/5
2008/5/16
問い合わせをした後、それがあるべき

2007/1/1
2007/11/1
2007/12/1
2008/5/1
2008/10/1
2009/11/1

これは
動作しているようだしない

SELECT distinct (cast(year(datecol) as nvarchar(20) ) +
       '/'+ cast(month(datecol) as nvarchar(20) ) + '/1') as dt1 
FROM Table 
ORDER BY dt1
役に立ちましたか?

解決

このようなSoemthingは、MS SQL Server上で動作します。

select 
    distinct 
    dateadd(day, -1 * DAY(datefield) + 1, datefield)
From
    datetable
order by
    dateadd(day, -1 * DAY(datefield) + 1, datefield) 

DATEADD関数呼び出しは基本的に減算(日-1)現在の日付からDAYS - >あなたは常に日付がであることを何でも月の最初の取得

これで並べ替えて、あなたが行われています! : - )

また、あなたはまた、「計算列」としてあなたのテーブルにこの機能を追加して、簡単にacccessのためにそれを使用することができます:

alter table yourTable 
  add FirstOfMonth As DATEADD(day, -1 * DAY(datefield) + 1, datefield) persisted

次に、あなたのクエリがさらに簡単になります:

SELECT DISTINCT FirstOfMonth
FROM YourTable
ORDER BY FirstOfMonth

マルク

他のヒント

このようcastを使用してのSQLServer避けで日付を扱うとき - 。結果の形式は、サーバーの設定に応じて変化します。

の代わりに convert を使用して、インスタンス112のための(形式を選択)それは、月に先行ゼロを追加します。

アニル、 あなたはまた、日付の時間部分を持っていますか?あなたは列に何データ型を使用していますか?あなたは 日時データ型またはChar型を使用していますか?

これは私のために動作します。

SELECT DISTINCT (DateField) AS Date FROM DateTable ORDER BY 1
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top