• ベストアンサー

日数計算

SQL初心者です。 アドバイスよろしくお願いします。 テーブル create table 時間テーブル ( id_cd text, makeday timestamp); 時間テーブルの makeday と現在の日付を比較して一週間以内ならば「1」,そうでなければ「0」を返すSQLを書きたいのですがどうすればよいでしょうか・・ 参考になるURLなどなんでもよいのでアドバイスよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • moritan2
  • ベストアンサー率25% (168/670)
回答No.1

select case when 時間テーブル.makeday + '1 weeks' < now() then 0 else 1 end; でいいと思います。 答えが論理値 t か f でいいならもっと簡単です。 select 時間テーブル.makeday + '1 weeks' >= now();

maedai
質問者

お礼

アドバイスありがとうございました。 自分なりにやってみて case when date(makeday)+7 <= current_date then '0' else '1' end でできました。 でも '1 weeks'でいけるんですね。 ありがとうございます。

関連するQ&A

  • テーブル作成時にエラー?

    こんにちは。 以下のような環境で操作を行っています。 RedHatLinux9.0 PostgreSQL 8.0.3 テーブル作成時に次のようなメッセージが出力され、テーブルを作成することができません。 NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "PK_SIKYO" for table "TM_SIKYO" ちなみに実行したSQL文は次の通りです。 CREATE TABLE "TOUSHIN"."TM_SIKYO" ( "SHIKYO_CD" int4 NOT NULL DEFAULT nextval('"TOUSHIN"."TM_SIKYO_SHIKYO_CD_seq"'::text), "SHIKYO_NM" varchar(50), "SHIKYO_RNM" varchar(50), "SHOW_FLAG" bool, "UNUSE_FLAG" bool, "CREATE_DATE" timestamp DEFAULT ('now'::text)::timestamp(6) with time zone, "CREATE_ID" varchar(10), "CHANGE_DATE" timestamp DEFAULT ('now'::text)::timestamp(6) with time zone, "CHANGE_ID" varchar(10), CONSTRAINT "PK_SIKYO" PRIMARY KEY ("SHIKYO_CD") ) WITHOUT OIDS; SQL文はWindows版のPostgreSQLから作成したものを、そのままコピーして利用しました。 プライマリーキーが正しく設定できていないようなメッセージだと思うのですが、対処法など詳しいことが分からずに困っています。 Windows版から出力したSQL文なので、SQL文に間違いがありそうな感じでもないですし、一体何が原因なのでしょうか?

  • SQLの相談

    SQLの相談です。 以下のようなテーブルについて CREATE TABLE `record`( `id` INT, `timestamp` TIMESTAMP, `point` INT ); 1) id毎に最新5件のデータを抽出 2) 合計pointが420以上のidだけを抽出 したいのですが…。 1)の処理について、うまい解決策を思いつきません。 助言をお願いします。

  • PostgreSQLのテーブル構造を取得したい

    現在PostgreSQLとPHP5を利用してアプリケーションを開発しております。 PHPにて現在すでに存在するPostgreSQLのテーブルの定義情報を取得するにはどうすればよろしいでしょうか。テーブルの定義情報は下記のようにSQLのCREATE文で取得したいと思っております。 CREATE TABLE favorite ( code serial NOT NULL, reg_date timestamp without time zone NOT NULL DEFAULT now(), update_date timestamp without time zone, title text, url text, u_id character varying(20) NOT NULL, enabled_flag smallint NOT NULL DEFAULT 1, CONSTRAINT web_favorite_pkey PRIMARY KEY (fv_code) ) 何卒よろしくお願いいたします。

  • オラクルのテーブルについて

    質問があります。 SQL文で指定したテーブル(test_tbl)のCREATEされた 日時とかわかるようなものはないでしょうか? たとえばテーブル (table_a, table_b, teble_c:全て同じ構成だが格納データが異なる)が あって一番最後に作成されたテーブルに アクセスしたい場合なんですが どのようなSQL文になるでしょうか? またそんな事はSQLではかけないような場合、 どのようにすればテーブルのクリエート日付を取得 することができるでしょうか? 宜しくお願いいたします。

  • テーブルが作成できない

    CREATE TABLE media ( id INT DEFAULT 0 primary key, media_name VARCHAR DEFAULT '', others text DEFAULT '', regis_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_date TIMESTAMP ); をMySQL 5.0.77で実行したところ ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' regis_date TIMESTAMP, update_date )' at line 3 のエラーが出てきてしまいます しかしMySQLを使い始めたばかりで今一理解が出来ず また、 text DEFAULT '' を使った他のテーブルは作成できています どこがおかしいのか教えていただけませんでしょうか、お願いします

    • ベストアンサー
    • MySQL
  • SELECT文の二段重ね

    次のSQL文を実行します。 create table1 (id, english) insert table1 (1,"foo") insert table1 (2,"bar") create table2 (id, japanese) insert table2 (1, "ふー") insert table2 (2, "ばー") SQL文法としては誤ってますが、成功したとします。 いま、select id from table1 where english = 'foo'; で1が得られます。 いま、select japanese from table2 where id = 1; で"ふー"が得られます。 これを一つのSQLite3のselect文で実現できないでしょうか。 select japanese from table2 where id = (select id from table1 where english = 'foo'); で良いですか? カテゴリ選択にSQLiteが無いのは、人気が無いからですかね。

  • 1ファイルを複数ファイルに分割したい

    CREATE TABLE 001 ( ) CREATE TABLE 002 ( ) ・ ・ ・ CREATE TABLE 999 ( ) という一つのファイル(total.sql)に 複数のたくさんのCREATE TABLE文が記述されています。 このファイルの中身を分割して、 001.sql、002.sql、・・・、999.sqlという風に 各テーブル名のファイルで作成しなおしたいです。 手作業でやると膨大な時間がかかってしまいます。 これをシェル、あるいはプログラミングで実装したいのですが、 どう書いたら良いでしょうか? 御詳しい方、どうか御願い致します。

  • 日付毎の集計方法

    下記のようなテーブル構成で、過去一週間の毎日について、登録した人の数を知りたいです。 ■テーブル名 my_table システムに登録すると,IDが付与され,登録した日付が記録されます。 ---------------------------------------- id(intger) | reg_date(登録した日付,timestamp) ---------------------------------------- 以下のようなSQLを考えたのですが、timestampが「2005-12-01 00:00:00+09」という細かい日付になっているので、これでは「1日」毎の集計にはなりません。 この場合、どう表現すればよいでしょうか? SELECT sum(reg_date) from my_table where ('now' - reg_date < '7days') GROUP BY reg_date order by reg_date

  • PostgreSQLの列分割(水平分割)について

    PostgreSQLで次のテーブルを作るとして create table test1(id int , name text , pass text , img bytea , dates date); このテーブルをパーティショニングしたいと思っています。 水平分割(dates列の値によって行をパーティショニング)についてのSQL文は、公式ドキュメントに例示されていたため理解したのですが、 垂直分割(列自体を分割)する設計のテーブルを作成する場合について調べているのですが、見つけることができませんでした。 id,name,pass,dateのテーブルと、id,imgのテーブルにパーティショニングするSQL文についてご教授願えないでしょうか

  • 生年月日計算について

    テーブル(A)     テーブル(B) ID --- 111      ID ---111 生年月日 --- 2007/02/18    日付 --2008/10/3 テーブル(A)には、ID、生年月日があります。 テーブル(B)には、ID、日付があります。 テーブル(A)の生年月日とテーブル(B)の日付を計算し 表示したいと考えていますが、うまく行きません…。 やりたい事としては、テーブル(B)の値とテーブル(A)の値を計算し 2008 - 2007 = 1なので1才と表示し、 10 - 02 = 8なので、8ヶ月と表示したいと考えています。 やり方として一番どのようなやり方が キレイなSQLを書けるのでしょうか? 一応http://ayuayuayu01.seesaa.net/article/106439889.htmlを参考にして やるか、またはSUBSTRで行う方法をイメージしています。 出来れば1回で実行したいので、SUBSTRは向いていないのかなぁっと思っています。