Postgreの日付関数に関して教えてください。

このQ&Aのポイント
  • PostgreSQLの日付関数について教えてください。
  • 表9.30の日付/時刻関数の例を実行していますが、make_で始まる関数がすべて失敗します。
  • make_dateの失敗の原因を教えてください。
回答を見る
  • ベストアンサー

Postgreの日付関数に関して教えてください。

Postgreの日付関数に関して教えてください。 表9.30 日付/時刻関数の例を実行していますが、 make_ で始まる関数がすべて失敗します。 PostgreSQL 9.6.2文書 9.9. 日付/時刻関数と演算子 https://www.postgresql.jp/document/9.6/html/functions-datetime.html 表9.30 日付/時刻関数 select age(timestamp '2001-04-10', timestamp '1957-06-13') select age(timestamp '1957-06-13')  : : select make_date(2013, 7, 15) select make_interval(days => 10) select make_time(8, 15, 23.5) select make_timestamp(2013, 7, 15, 8, 15, 23.5) select make_timestamptz(2013, 7, 15, 8, 15, 23.5) make_dateの失敗のメッセージ ERROR: function make_date(integer, integer, integer) does not exist LINE 1: select make_date(2013, 7, 15) ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. ********** エラー ********** ERROR: function make_date(integer, integer, integer) does not exist SQLステート:42883 ヒント:No function matches the given name and argument types. You might need to add explicit type casts. 文字:8 何が悪いのでしょうか。

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

make_dateやmake_timeは、バージョン9.4以降で使える関数です。PostgreSQLのバージョンが9.3.X以前なのでは? PostgreSQLのバージョンは下記のSQLを実行しても分かります。 SELECT version();

questorfe
質問者

お礼

ありがとうございます。 postgres=# select version(); version -------------------------------------------------------------------------------- ------------------------------- PostgreSQL 9.2.18 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 4.8.5 20150 623 (Red Hat 4.8.5-11), 64-bit (1 row) そういう事のようです。

関連するQ&A

  • 日本語文字の抽出について

    SELECT * FROM pref WHERE pref_name='東京都'; としてもレコードが返ってきません。(レコード数が0になります。) 次にsubstringを用いて SELECT * FROM pref WHERE substring(pref_name) = '東京都'; としましたが、こちらでは下記のエラーになってしまいます。 何かよい方法はありませんんでしょうか? ERROR: function pg_catalog.substring(text) does not exist HINT: No function matches the given name and argument types. You may need to add explicit type casts.

  • 年齢計算

    以下のフィールド構成のテーブルがあるのですが 「birthday」フィールドの値を元に、現時点の年齢を計算して 「nenrei」フィールドに入れたいと考えています。 【player_tbl】 id     ID name   名前 birthday 誕生日(19950203のような形式でデータが入っています) nenrei  計算された年齢を入れる 以下のSQLを実行してもエラーになります。 update player_tbl set nenrei = extract(year from age(current_date, birthday)) ; SQL エラー: ERROR: function age(date, character varying) does not exist HINT: No function matches the given name and argument types. You may need to add explicit type casts. birthdayのところを工夫しないとダメだということは、なんとなくわかるのですが どのように変更すると実現できるのかわかりません。 age関数の中に、フィールド名を入れたい場合は、どのような記述になるのでしょうか? また、データ数は10万件くらいですが、一気に更新するのは難しいでしょうか? DBはPostgreSQLです。 よろしくお願いいたします。

  • 日付け関数について

    日付関数において大小を比較したいのですが、以下のように記述しましたが 認識しません、記述例を教えて下さい、 セルA1に =today() と記載 A2に =DATE(2004,1,1) と記載、 VBAif関数にて、 =if range("A1").select >= range("A2").select then ・・・・・・・・・・と記載しています、

  • 日付演算のSQLで困っています。

    functionにおいて以下のようなSQLを実行する際に ''内を可変にできないものか悩んでいます。 select current_timestamp + '3 seconds'; select current_timestamp + '4 weeks'; select current_timestamp + '-1 days'; 安易な考えと笑われてしまいそうですが、 ''の部分をvarchar変数にして実行しようとしたら エラーとなってしまいます。 どなたか良いアイデアや、まずい点のご指摘を いただけたらありがたいです。 こんな感じでやってみました。 isec integer; tm1 TIMESTAMP; chr1 varchar(16); ---途中略 select current_timestamp + chr1 into tm1; ・・と書いたところエラーとなります。 isec := 3; select ''''||ltrim(to_char(isec, '99999999') || ' seconds') ||'''' into chr1; とか select ltrim(to_char(isec, '99999999') || ' seconds') into chr1; としてみて 「select current_timestamp + '3 seconds' into chr1」としたつもりです。 以上よろしくお願いします。

  • 日付毎の集計方法

    下記のようなテーブル構成で、過去一週間の毎日について、登録した人の数を知りたいです。 ■テーブル名 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

  • セレクトボックスの連動処理

    お世話になります。 JavaScript勉強中のもので、サンプルソースを見つけることができなかったので、質問させてください。 http://javascriptmarket.com/script/jsm07.html http://www.alink.co.jp/tech/blog/sample_code/js/team_json_20090404.html やりたいイメージとしては、上記のページのようなことです。 具体的には、日付の入るセレクトボックスを2つ用意し、 片方のセレクトボックスの日付を選択すると、もう片方のセレクトボックスに●日後の日付選択肢が表示される。 ということをしたいと思っています。 元々の日付の選択肢が静的であれば上記URLを参考にすれば作れる自信があるのですが、動的なものであまり自信がありません。。。 以下実際に作ったコードです。 (PHPで2つ目のセレクトボックスには3日後の日付が表示されるようにしています。) ---------------------------------------------------------- //日付 for($a = 0; $a < 14; $a++) { $timestamp[] = strtotime("+$a day"); } $day_set = array( "0"=>"▲日付を選んで下さい", "1"=>date( 'Y/m/d', $timestamp[0] ) , "2"=>date( 'Y/m/d', $timestamp[1] ) , "3"=>date( 'Y/m/d', $timestamp[2] ) , "4"=>date( 'Y/m/d', $timestamp[3] ) , "5"=>date( 'Y/m/d', $timestamp[4] ) , "6"=>date( 'Y/m/d', $timestamp[5] ) , "7"=>date( 'Y/m/d', $timestamp[6] ) , "8"=>date( 'Y/m/d', $timestamp[7] ) , "9"=>date( 'Y/m/d', $timestamp[8] ) , "10"=>date( 'Y/m/d', $timestamp[9] ) , "11"=>date( 'Y/m/d', $timestamp[10] ) , "12"=>date( 'Y/m/d', $timestamp[11] ) , "13"=>date( 'Y/m/d', $timestamp[12] ) , "14"=>date( 'Y/m/d', $timestamp[13] ) ); //お渡し日付セット for($a = 3; $a < 17; $a++) { $timestamp2[] = strtotime("+$a day"); } $day2_set = array( "0"=>"▲日付を選んで下さい", "1"=>date( 'Y/m/d', $timestamp2[0] ) , "2"=>date( 'Y/m/d', $timestamp2[1] ) , "3"=>date( 'Y/m/d', $timestamp2[2] ) , "4"=>date( 'Y/m/d', $timestamp2[3] ) , "5"=>date( 'Y/m/d', $timestamp2[4] ) , "6"=>date( 'Y/m/d', $timestamp2[5] ) , "7"=>date( 'Y/m/d', $timestamp2[6] ) , "8"=>date( 'Y/m/d', $timestamp2[7] ) , "9"=>date( 'Y/m/d', $timestamp2[8] ) , "10"=>date( 'Y/m/d', $timestamp2[9] ) , "11"=>date( 'Y/m/d', $timestamp2[10] ) , "12"=>date( 'Y/m/d', $timestamp2[11] ) , "13"=>date( 'Y/m/d', $timestamp2[12] ) , "14"=>date( 'Y/m/d', $timestamp2[13] ) ); <select name="day" style="margin-right: 50px"> <?php foreach ($day_set as $key => $value): ?> <option value="<?php echo $value; ?>"><?php echo $value; ?></option> <?php endforeach; ?> </select> <select name="day2" style="margin-right: 50px"> <?php foreach ($day2_set as $key => $value): ?> <option value="<?php echo $value; ?>"><?php echo $value; ?></option> <?php endforeach; ?> </select>

  • 日付

    今日の日付(date型)の3日20時間26分58秒後の日付(時刻)を 求める関数って御座いますでしょうか 例 1月16日14時41分55秒 の 3日20時間26分58秒後 → ?月?日?時?分?秒 教えて下さい。宜しくお願いします

  • PostgreSqlについて

    おはようございます。 質問させてください。 テーブルのカラムにtimestamp型のフィールドがあるとします。 テーブルinsertの時に現在の時間をいれたいのですが、どのような値を入れればいいのでしょうか? test_tbl-------------- ID:INTEGER DATE:TIMESTAMP ---------------------- insert into test_tbl (ID, DATE) values (1, ****); ****の部分にnow, dateとかそんな関数はあるのでしょうか?

  • エクセルmatch関数を使った日付の検索

    株価の表があり、項目は日付、初値、高値、安値、終値、出来高のA列からF列になっています。 もう一つデータの入ってない表があり、そちらにデータの入っている元の表から日付で検索して合致 するデータを持ってきたいのです。(呼び出し側の表の最後のデータから、日付を取り出して検索しています) 項目日付の書式は日付型になっています。 自分なりに調べて次のようにしました。 Sub sinkabuka() Dim ken As Variant Dim motorow As Integer Dim sinrow As Integer Dim han As Object Dim a As Variant motorow = Worksheets(2).Range("a65536").End(xlUp).row sinrow = Worksheets(1).Range("a65536").End(xlUp).row If sinrow = 1 Then Exit Sub End If ken = Worksheets(1).Range("a" & sinrow).Value2 Worksheets(2).Activate Worksheets(2).Select Set han = Range("a2:f" & motorow) a = Application.WorksheetFunction.Match(ken, han, 0) <ーエラーになります match関数でアドレスをとれるようになったら、合致したデータの次のデータをとるようにしたいと おもっています。 試しにvlookup関数を使ったらデータを返してくれました。 excel2010 windows7です。 アドバイスをお願いします。 

  • 日付型(時刻含む)を抽出条件にして行を抽出したい。

    はじめまして、よろしくお願いします。 現在SQLサーバー2000を使用してこの処理を行おうと思っております。 一度テーブルに格納したデータをSELECT文を使って抽出したい と思っているのですが、WHERE条件に日付型のフィールドを指定するとうまく行きません。(時刻が日付型のフィールドに入っている場合、うまくいきません。) やっていることは YMD(DATE型・主キー)、ID(VERCHAR型・主キー)、NAME(VERCHAR型) というのテーブル(テーブル名:MEIBO)に入っている 2002/02/02 14:10:55、0001、山田 太郎 というデータを 取込年月日、個人IDを指定して特定の列を取り出そうとしています。 SQL文は SELECT * FROM MEIBO WHERE YMD = '2002/02/02 14:10:55' AND ID = "0001' と記述していますが、一件もヒットしません。 DATE型のフィールドにはINSERTするときにGETDATE()をつかってシステム日付を 格納するようにしています。 GETDATE()ではなく、DATE()を使ってシステム日付を格納した 2002/02/02、0001、山田 太郎 という時刻の入っていないデータに対しては SELECT * FROM MEIBO WHERE YMD = '2002/02/02' AND ID = "0001' というSQL文でヒットするのですようです。 時刻が入ったらそのフィールドを抽出条件として使うことは無理なのでしょうか? 基本的な部分で勘違いしているのかもしれませんが なにかお気づきの点がありましたら、ご教授ください。