質問
私は、同じ列でソートされます日付列とは別の年と月を必要としています。
私は(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
所属していません StackOverflow