- ベストアンサー
SQL Server 2005 Expressを利用して1ヶ月前のデータを表示する方法
- SQL Server 2005 Expressを使って、テーブル(tbl出席簿)に格納されたデータのうち、1ヶ月前のデータを表示する方法を教えてください。
- Accessでは、日付をフォーマットして1ヶ月前のデータを取得する方法がありますが、SQL Server 2005 Expressを使った方法が分かりません。
- お手数ですが、SQL Server 2005 Expressを利用して1ヶ月前のデータを表示するSQL文を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
表の構成列、データ型、格納データ、得たい結果を示せば、回答が得られやすいと思います。 「tbl出席簿」表の「日付」列は、SQL Serverではdatetime型でいいのですね? <SQL例> select 名前,日付,一箇月前 from (select 名前,日付, substring(convert(varchar(10),dateadd(month,-1,getdate()),101),7,4) +'/'+substring(convert(varchar(10),dateadd(month,-1,getdate()),101),1,5) as 一箇月前 from tbl出席簿) as x where 日付=一箇月前 ; <注意事項> (1)「select ~ from (select ~ from ~) as 別名」はインラインビューであり、SQL Server 2005以降でないと実行できないと記憶しています。今回は、「1ヶ月前の日付」の条件を簡単に指定したいがためにインラインビューを使っています。 (2)「1ヵ月前」という名前は構文エラーになってしまったため、「一箇月前」と変更しています。
その他の回答 (2)
- chukenkenkou
- ベストアンサー率43% (833/1926)
>as 一箇月前の表示をしないようにするためには >どうしたらいいか 「名前」列と「日付」列だけ表示したいということでしょうか? もしそうなら、、、以下のように変更してください。 <SQL例> select 名前,日付 from tbl出席簿 where substring(convert(varchar(10),日付,101),7,4) +'/' +substring(convert(varchar(10),日付,101),1,5) =substring(convert(varchar(10),dateadd(month,-1,getdate()),101),7,4) +'/' +substring(convert(varchar(10),dateadd(month,-1,getdate()),101),1,5) <簡単な説明> (1)convert(varchar(10),日付,101) →101は、日付データの書式を示し、mm/dd/yyyyの形式で返すように指定しています。 (2)substringでは、(1)のmm/dd/yyyyの形式から、yyyyを前に持って行き、'/'と(1)の残りのmm/ddを文字連結した結果を返すように指定しています。
- chukenkenkou
- ベストアンサー率43% (833/1926)
#1回答者です。 「日付」列には、時刻も入っていますか? #1のSQLでは、時刻が入っていない場合のSQLになっていました。 日時が入っている場合にも検索できるSQLを、改めて提示します。 日付の書式は、yyyy/mm/ddである必要はどの程度でしょうか? もし、yyyy-mm-ddでもよいなら、SQLが少し簡単になります。 (1)yyyy-mm-ddでもよい場合 -- yyyy-mm-dd select 名前,日付, convert(varchar(10),dateadd(month,-1,getdate()),120) as 一箇月前 from tbl出席簿 where convert(varchar(10),日付,120) =convert(varchar(10),dateadd(month,-1,getdate()),120) (2)yyyy/mm/ddである必要のある場合 -- yyyy/mm/dd select 名前,日付, substring(convert(varchar(10),dateadd(month,-1,getdate()),101),7,4) +'/' +substring(convert(varchar(10),dateadd(month,-1,getdate()),101),1,5) as 一箇月前 from tbl出席簿 where substring(convert(varchar(10),日付,101),7,4) +'/' +substring(convert(varchar(10),日付,101),1,5) =substring(convert(varchar(10),dateadd(month,-1,getdate()),101),7,4) +'/' +substring(convert(varchar(10),dateadd(month,-1,getdate()),101),1,5)
お礼
chukenkenkou様 二度にわたるご回答ありがとうございます。 心より厚くお礼申し上げます。 ただ今、ANo.2の(2)yyyy/mm/dd形式で確認しましたところ 見事に抽出してくれました。 ありがとうございました。 ところでas 一箇月前の表示をしないようにするためには どうしたらいいか、再度御教示いただけないでしょうか。 はなはだ勝手なお願いで誠に申し訳ございませんが 重ね重ね宜しくお願い申し上げます。 なお、データ型について御連絡しておきます。 名前…nvarchar(30) 日付…datetime 以上
お礼
chukenkenkou様 度重なるご回答、心より厚く厚くお礼申し上げます。 誠にありがとうございました。 お礼の言葉もございません。 ANo.3で希望するデータを抽出することが出来ました!!! 今後とも宜しくお願い申し上げます。 58歳(男)より