• ベストアンサー

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) と変換しています。 もっと簡単に変換する方法はありますでしょうか? ご教示頂けましたら、助かります。 宜しくお願い致します。

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

  • ベストアンサー
  • innoya
  • ベストアンサー率71% (10/14)
回答No.1

こんにちは。 そうですね。 現在はそういう方法しかありません。 もしくは関数(FUNCTION)を作成してSQLを少しキレイに作成するのはどうでしょうか? 下記のSQLをご参考ください。 1)「fnCharToTime」関数を作成します。 CREATE FUNCTION dbo.fnCharToTime ( @Str char(6) ) RETURNS time AS BEGIN RETURN CONVERT(time, SUBSTRING(@Str,1,2)+':'+SUBSTRING(@Str,3,2)+':'+SUBSTRING(@Str,5,2)) END 2)結果 DECLARE @Str char(6) SET @Str = '090000' SELECT dbo.fnCharToTime(@Str) どうでしょうか?

yuppy326
質問者

お礼

やはり、簡単な方法はないのですね。 いろいろと検討したのですが、 関数を作成する方法は今後の参考にさせて頂くことになりました。ありがとうございました。

関連するQ&A

  • 文字列を 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 型に変換するにはどのようにしたらよいのかご教示いただけないでしょうか。 よろしくお願いします。

  • char*型の文字列をchar[10]へ。

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

  • Informixで文字列を数値型に

    こんにちは。 当方、Linux7.3+アプリケーション(DB:Informix)を使用しています。 文字列を数値に変換するSQLに悩まされています。 内容 01/01/08からなる文字列と20080101と手動入力される数値を比較する事が最終目標です。 当方が試みている方向は、 01/01/08をSUBSTRING()で20080101に成型し、数値比較をしたい、と思っています。 SUBSTRING()で、文字列型で20080101までできるのですが、数値型にCASTが出来ません。 検討した関数は、下記の通りですが、構文エラーとなり、実装できません。 お助け下さい。 CAST(20080101) as INTEGER TO_NUMBER(20080101) INT(20080101) CONVERT(20080101)

  • 文字列の分割

    "abcdefghijk"というような文字列を  例(1):abcd、efg、h、i、jk  例(2):ab、cdefg、h、ijk  例(3):a、b、c、de、f、ghijk のように分割したいのですが、substringを使って取得するしかないでしょうか。 素人考えですみませんが、 class test{ char[] a = new char[4]; char[] b = new char[3]; char c; char d; char[] e = new char[2]; } のようなクラスを作り、 test t = new test(); t = "abcdefghijk"; などどすることで、分割する方法はないでしょうか。  #上記を試したところ、互換性のない型とエラーになりました。 分割するパターンが複数あり、文字列が長くなるとsubstringを記述する回数が増え、 終了インデックスを間違えそうで。  #間違えないようにすればいいだけの話ですが。 substring以外の方法、またはsubstringの上手な使い方がありましたら、教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 文字列を時刻に変換

    先日、下記のリンク先で作業時間の関数を教えていただきました。 <http://okwave.jp/qa/q9023764.html> ただ、A列、B列が文字列のため、下記の関数をC6(ユーザー定義の[h]:mm:ss)に入れると空白なってしまいました。 試にA列、B列を時刻に変換すると作業時間が表示されたのですが、 一括で文字列から時刻に変換する方法はありますでしょうか? 行が5,000行くらいあって、書式設定で変更後、F2を押下するのはつらいので。。。 また、他にも良い方法があれば教えていただければと思います。 どうぞよろしくお願いいたします。 【作業時間を計算する関数】 =IF(COUNT($AQ$2:$AS$3,$AO11,$AP11)=8,IF(AND($AO11>1,$AP11>$AO11,COUNTIF($AQ$2:$AS$2,">0")=3,COUNTIF($AQ$2:$AS$2,"<=1")=3,$AQ$2<$AQ$3,$AR$2<$AR$3,$AS$2<$AS$3),(MIN($AP11-INT($AO11),$AQ$2)-$AO11+INT($AO11))*($AO11-INT($AO11)<$AQ$2)+(MIN($AP11-INT($AO11),$AR$2)-MAX($AO11-INT($AO11),$AQ$3))*($AO11-INT($AO11)<$AR$2)*($AP11-INT($AO11)>$AQ$3)+(MIN($AP11-INT($AO11),$AS$2)-MAX($AO11-INT($AO11),$AR$3))*($AO11-INT($AO11)<$AS$2)*($AP11-INT($AO11)>$AR$3)+($AP11-INT($AO11)-MAX($AO11-INT($AO11),$AS$3))*($AP11-INT($AO11)>$AS$3),""),"")

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

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

  • CStringからchar*への型変換について教えてください。

    以前の質問に int型 → CString型/char型 がありましたが、 CString型をchar*型に変換する方法を 教えていただければありがたいです。 MSDNで「LPCTSTRキャスト」が説明されていましたが、 例が載ってないのでよくわかりませんでした。 よろしくお願いします。

  • SQLの型について

    ASP+SQL初心者、hiroと申します。 ASPからデータベースに 1'56.123 のような計測タイムなどを INSERTする場合、データベースの型は何にしたらよろしいのでしょうか? 今の所、varchar型で試しているのですが、「型が一致しません」と なってしまいます。 char型にCONVERTしても、うまくいきませんでした(結果は同じ)。 以前は、分・秒・1/1000 のように3分割してINSERTしていましたが、 できれば、今回は1つでINSERTしたいと思っています。 よろしくお願いします。

  • SQL Serverでの文字列の格納

    SQL Serverで日本語の文字列を格納する型について質問させてください。 日本語文字列の格納にはnvarcharとntext型がありますが、全部 ntext型にしてもよいものでしょうか? 全部ntext型にした場合、何か都合の悪いことがあるのでしょうか?

  • 文字列になっている配列を‥

    以下の値がDBに文字列の項目に登録されています。 DB から値を取得したのはいいのですが文字列なので foreach でグルグルしようとすると怒られてしまいます。 配列の型に変換できればいいのですが(array)だとうまく行かないしどうすればいいかどなたかご教授願えないでしょうか。 よろしくお願いします。 ■値(文字列でDBに格納されてます‥) array( 1=>'a', 2=>'b', 3=>'c', 10=>array( 'A'=>1, 'B'=>'hoge1', ), 11=>array( 'A'=>2, 'B'=>'hoge2', ), 12=>array( 'A'=>3, 'B'=>'hoge3', ), )

    • 締切済み
    • PHP