文字列をtime型に変換する方法とは?

このQ&Aのポイント
  • PostgreSQL 8.2 & PgAdmin 1.6.3(WinServer 2003)を使用しています。
  • varchar 型のカラムに格納されている時刻を表す文字列('9:15' など)を time 型に変換してビューを作成する必要がある。
  • 文字列を time 型に変換するにはどのようにしたらよいのかご教示いただけないでしょうか。
回答を見る
  • ベストアンサー

文字列を time 型に変換するには。

文字列を time 型に変換するには。 お世話になります。 PostgreSQL 8.2 & PgAdmin 1.6.3(WinServer 2003)を使用しています。 varchar 型のカラムに格納されている時刻を表す文字列('9:15' など)を time 型に変換してビューを作成する必要があるのですが、できずに困っています。 具体的には... 「table1」というテーブルに「時刻」(varchar 型)という名前のカラムを作成し、「9:15」という文字列を格納しておきます。 これをもとにビュー(view1)を作ろうとしているのですが、select 文のところで 、ERROR: syntax error at or near "時刻" SQLステート:42601 というエラー(構文エラー)が出てしまいます。  select time 時刻 from table1  結果:ERROR: syntax error at or near "時刻" SQLステート:42601 ちなみに、時刻を文字列で指定してやると、ちゃんと time 型で結果が返ります。  select time '9:15'  結果:09:15:00 抜本的に方法が間違っているとはおもうのですが、いくら調べてもこれを解決できるようなサイトが見当たりませんでした。 文字列を time 型に変換するにはどのようにしたらよいのかご教示いただけないでしょうか。 よろしくお願いします。

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

  • ベストアンサー
回答No.3

「time 定数」で「指定した定数をtime型と認識してね」という構文であり、「time 列名」という構文はありません。 標準SQL準拠の書き方であれば、 CAST(列名 AS TIME) [AS 別名] PostgreSQL独自の書き方であれば、 列名::time といった書き方もあります。

shohei86
質問者

お礼

CAST(列名 AS TIME) [AS 別名] 列名::time いずれの方法でもうまくできました。 どうもありがとうございました。

その他の回答 (2)

  • med2dic
  • ベストアンサー率77% (21/27)
回答No.2

CAST関数ではできませんか?

shohei86
質問者

お礼

CAST関数でできました。どうもありがとうございました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1
shohei86
質問者

お礼

どうもありがとうございました。

関連するQ&A

  • SQLで文字列を時刻に型変換する方法

    SQLで文字列を時刻に型変換する方法を教えていただきたいです。 char型のAというカラムに'090000'が格納されています。 この値を time型のBというカラムに型変換して登録したいのですが、 cast(A as time) としてもエラーが出てしまうので、現在は cast(SubString(A,1,2)+':'+SubString(A,3,2)+':'+SubString(A,5,2) as time) と変換しています。 もっと簡単に変換する方法はありますでしょうか? ご教示頂けましたら、助かります。 宜しくお願い致します。

  • YYYYMMDDhhmmss形式の文字列を日付時刻に変換・計算する方法

    YYYYMMDDhhmmss形式の文字列を日付時刻に変換・計算する方法 お世話になっております。 今回の質問内容なのですが、 あるテーブルにYYYYMMDDhhmmss形式(varchar(14))の列がありまして、 この値の時刻計算を行いたいと思っております。 YYYY/MM/DD hh:mm:ss形式であれば、DATEADD関数で 計算が可能なのですが、やり方がわからず苦戦しております。 例えば1秒加算させたいと思い、以下のSQL文を実行してみたのですが、 SELECT DATEADD(second,1,(CONVERT(DATETIME,'20100312111111'))) 「文字列から日付/時刻に変換できませんでした。」というエラーが 発生してダメでした。 時刻部分だけ取り出して、それに時分秒を分ける「:」をつけて変換し 計算するという方法は極力避けたいと思っています。 何かいい方法がありましたら、ご教示のほどよろしくお願い致します。

  • access2003 「#エラー」を文字列にしたい

    テキスト型に入れた値を数値に変換し、「#エラー」を文字列にしたい テーブル1のデザインビューで ・フィールド1 テキスト型 ・主キーなし として データを 1 2 あ を投入します。 そして SELECT CLng(テーブル1!フィールド1) AS 数値型に変換 FROM テーブル1; クエリを作りました。 1と2は数値に変換されますが、文字列を入れた「あ」は 「#エラー」になります。  「#エラー」を「未設定」という文字列にしたいのですが どうすえばいいのでしょうか? よろしくお願いします。

  • アプリから受け取った文字列を日付型に出来ない

    いつもお世話になっています。 タイトルにもあります通り、 アプリから受け取った文字列の日付型変換が上手くいかず失敗します。 状況は下記です。 SQL SERVER 2005に、 アプリから2っの文字列を受け取り、その文字列を日付型に変換し、 日付範囲検索をする。といったストアドを作成しました。 アプリ開発環境はVisualStudio2008、C#のウィンドゥズフォームです。 ストアド自体はManagement Studio上で日付型変換可能な 文字列2っを渡し、単体で実行すると期待通りの動作をします。 しかしアプリから文字列を受け取り実行すると、 「文字列から datetime 型に変換中、変換に失敗しました。」 というエラーがアプリ側に返されます。 しかし、この時アプリが渡す文字列をコピー&ペーストで ManagementStudioのクエリデザイナで実行すると上手く行きます。 アプリから日付変換前の文字列を渡す時に必要な何かが抜けているのでしょうか?ご教授お願いします。 ---ストアドを呼ぶアプリ側--- string kaishibi; string syuryobi; kaishibi += "1753/01/01"; syuryobi += "9999/12/31"; System.Data.SqlClient.SqlCommand hCommand = cSqlConnection.CreateCommand(); hCommand.CommandText = "EXECUTE [ストアド名] kaishibi,syuryobi"; System.Data.SqlClient.SqlDataReader cReader = hCommand.ExecuteReader(); (ここでエラー、「文字列から datetime 型に変換中、変換に失敗しました」) --ストアド側-- ALTER PROCEDURE [ストアド名]  @startData VARCHAR(50),  @endData VARCHAR(50) DECLARE @kaishibi DATETIME, @syuuryoubi DATETIME SET @kaishibi = CONVERT(VARCHAR,@startData,120) SET @syuuryoubi = CONVERT(VARCHAR,@enddata,120) SELECT LOGNO FROM LOG_TBL WHERE DateTime between @kaishibi and @syuuryoubi

  • 初歩的ですが、どうしてかテーブルが作成できないで困っています。

    こんにちは。 MySQLを使い始めたのですが、 テーブルを作成するという初歩的な部分で、 どうしても自分では分からなくなってしまい 質問させていただきます。 create databaseを行った後、 普通にテーブルを作成しようとしただけではあります。 作成しようとしたテーブルは、 keyというカラムとvalueというカラムの 計2つからなるテーブルです。 しかし、 カラム名の1つを「key」ではなく「time_to_get_the_key」で行うと、 正常にテーブルが作成されるのに、 mysql> CREATE TABLE 20090413_put1(time_to_get_the_key VARCHAR(100), value VARCHAR(100)); Query OK, 0 rows affected (0.01 sec) 同じカラム名を「key」でテーブル作成しようとすると、作成ができないでいます。 mysql> CREATE TABLE 20090413_put1(key VARCHAR(100), value VARCHAR(100)); 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 'VARCHAR(100), value VARCHAR(100))' at line 1 本来は、 「key」と「value」というカラムで、 それぞれ100文字以内で収まる文字列を カラムに挿入させるつもりでした。 何か御意見いただけるとありがたいです。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • char*型の文字列をchar[10]へ。

    char*型の文字列をchar[0]から順番に格納したいのですが、 どうやってやるかご存知の方おられますでしょうか。 申し訳ございません、宜しくお願い致します。

  • MySQLの文字列型について

    お世話になります。 win7 SP1 / エクセル2013  プロセッサ IntelCore Duo CPU 1.2GHz メモリ 1GB の環境です。 ローカルPCで MySQLからエクセルにVBAを使ってSELECT構文にて 書き出ししようとしていますが、 MySQL側で文字列型を TEXT にて保存しているカラム(列)が 1行分しかエクセル側に移せません。 MySQLのデータをVARCHAR(510)型に変更した上で データを保存しなおして 同じSELECT構文にて実行すると 問題なく抽出できます。 TEXT型は可変長型なので 問題ないかと思っていたのですが SIZE(65535バイト)は関係しますでしょうか? 詳しくないのですが TEXT型は可変長バイナリーデータ VARCHAR型は可変長文字列型 と認識してますが、 同じ可変長型でも、データ取り出し時に 何か違いが生じるのでしょうか? 原因がよくわかりません。 また、そうであるとすると このような作業を行う場合は TEXT型の利用はあまりしない方が良いということでしょうか? 特に長いURLなどを保存するときは 文字数を推測し難いので TEXT型の方が便利かと思っています。 どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • C言語で整数を文字列へ型変換

    C言語で整数を文字列へ型変換 int result[11]; const char *tmp; resultの中の11個の数字を 1,2,3,4,5,6,7,8,9,10,11 のような文字列にして、tmpへ代入したんですが、やり方が分かりません。 Cの初心者ですので、教えていただきたいです。

  • 日付、文字列変換に関して

    日付、文字列変換に関して 文字列の日付に対し、プラス1ヶ月した後、また文字列に戻すような 仕掛けを考えています。 そこで、以下のような記述をしましたが、どうも最後の文字列への変換が うまくいきません。 何が原因でしょうか。。。 DateTime A_time; DateTime B_time; string AFormat; AFormat = "yyyyMM"; A_time = DateTime.ParseExact("201012", AFormat, null); B_time = A_time.AddMonths(1); string C_time = B_time.ToString("YYYY/MM"); 初歩的な内容で申し訳ありませんが、よろしくお願いします。

  • テーブルの設計はとりあえず文字列で取り込み?

    テーブルの設計はとりあえず文字列で取り込み? こんにちは。会社の上司にSQLについて教えてもらいました(ACCESS2003)。 上司曰く、とりあえずテーブルの設計はvarcharにしておけば大丈夫。 もし取り込んだ値が数値なら、あとで数値に変換する関数で数値に変換して計算行えばいいよと言われました。 とりあえず、文字列なら必ずインポートできるからテーブルのデータ型は全て文字列型。 というのは正しいのでしょうか?様々な型があるのに、すべて文字列型にしてもいいのかなと素朴な疑問が生まれました。 よろしくお願いします。