• ベストアンサー

文字のゼロ埋め

初歩的なことかもしれませんがよろしくお願いします。 ----- 時間DB ---------------- 年月日 NUMBER(8,0) 時 NUMBER(2,0) ---------------------------- 次ののSQLを発行すると SELECT * FROM 時間DB WHERE (年月日 || 時) >= 2006030101 AND (年月日 || 時) <= 2006030223 時がNUMBER型なので 2006030110以上のレコードがSELECTされてきてしまいます。 時をゼロ埋めにしてから上記のSQLを発行するには どのようにしたらよいのでしょうか? また,その他に良い方法がございましたら 御教授願います。

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

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

NUMBER型なので、かけ算を使って、桁を揃えるか、 フォーマット付きの文字列変換を使うことになります。 where to_char(年月日,'FM00000000')||to_char(時,'FM00') between '2006030101' and '2006030223' where 年月日 * 100 + 時 between 2006030101 and 2006030223;

-cinq-
質問者

お礼

回答ありがとうございました。 上記の方法でうまくいきました。 2つめの方法で行う事にしました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • dober-o
  • ベストアンサー率59% (260/439)
回答No.1

とりあえず思い付きです。 SELECT * FROM 時間DB WHERE (to_char(年月日) || lpad(to_char(時),2,'0')) >= '2006030101' AND (to_char(年月日) || lpad(to_char(時),2,'0')) <= '2006030223' lpad は左文字埋めです。 参考になれば・・・。

-cinq-
質問者

お礼

回答ありがとうございました。 上記の方法でもうまくいきました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • TO_DATEの使い方を教えて下さい

    Oracleを習い始めたばかりで、とても初歩的な質問ですみません。 customer_numberが124でorder_dateが09/05/98のレコードをSELECTしたいのですが、 TO_DATEを使うとうまくいきません。 その条件に合うレコードは存在して、日付をデフォルトの形で書くとSELECTできます。 TO_DATEの使い方を間違えているのでしょうか。 よろしくお願いします。 SQL> select order_number 2 from orders 3 where customer_number='124' and order_date='05-SEP-98'; ORDER ----- 12500 SQL> select order_number 2 from orders 3 where customer_number='124' and order_date=to_date('09/05/98','MM/DD/YY'); no rows selected

  • date型でのbetweenについて教えてください。

    皆様、新年明けましておめでとうございます。 早速ですが、date型でのbetweenについて教えてください。 SQL文 SELECT * FROM test WHERE date between date '2007-12-01' and date '2007-12-31' を発行すると、2007-12-31のレコードがあるのに該当しません・・・ 試しにSQL文を SELECT * FROM test WHERE date between date '2007-12-01 00:00:00' and date '2007-12-31 23:59:59' としても2007-12-31のレコードは検索されません・・・ SQL文を SELECT * FROM test WHERE date between date '2007-12-01' and date '2008-01-01' にすると2007-12-31が該当するのですが、 SELECT * FROM test WHERE date between date '2007-12-01' and date '2007-12-31' では2007-12-31のレコードは該当しないものでしょうか?? select * from test where num between 10 and 100 とした場合では、num が 10 ~ 100 のものが問い合わされますよね?? date型になるとこうならないのでしょうか?? よろしくお願いします。

  • データ抽出の速度について

    オラクルのあるテーブルに10万件のレコードがあります。カラム数は30です。 初歩的な話になりますが、(1)と(2)はどちらが速いでしようか。 (1) SELECT x FROM TBL_A WHERE ...AND...AND...AND...AND...AND という複雑なSQLを実行するとします。 これに該当するレコード数は[3千件]です。 これで、 value =RS("x") RS.movenext を3千回実行する。(sqlを実行するのは一回のみ) (2) 同じく複雑なSQLを実行します。 SELECT x FROM TBL_A WHERE ...AND...AND...AND...AND...AND VAL=15 これに該当するレコード数は[1]件です。 value =RS("x") で取得。 また同じSQLを3千回実行する。 上記について初歩的ですが、確認したいです。 sql実行の対象レコードが、数万に上っても、SQLを何回も実行したほうがやはり遅いでしょうか。 また、上記の3千が、100件程度とか少ない場合、速度差が逆転しないでしょぅか。

  • Pro*Cの大文字小文字

    こんにちは。 現在Oracle9 Pro*Cで開発をしているのですが、下記のSQLが変です。 どう変かというと・・・ (1)EXEC SQL SELECT ABC FROM DB1 WHERE A_NUM = '1'; (2)EXEC SQL SELECT abc FROM DB1 WHERE A_NUM = '1'; (3)EXEC SQL SELECT Abc FROM DB1 WHERE A_NUM = '1'; 元々(1)のように記述してありました。 それがある日突然データがあるのにNotFoundになって、ためしに項目名ABCをabcに変えたところ、なぜだかselectできるようになりました。 しかし(2)も今日突然データがあるのにNotFoundになり、(3)のようにAbcにかえたところ、selectできるようになりました。 大文字小文字は関係ないと誰に聞いても言われるのですが、実際今は(3)でないと同じデータでもselectできません。 今はこれでいいですが、この調子で行くときっといつか(3)でもselectできなくなり、aBcとかにしなくてはいけない日が来ると思うのです。 なんででしょう? 環境の問題とかでしょうか? 何か分かる方がいたら、よろしくお願いします。

  • 【再投稿】Pro*Cの大文字小文字

    こんにちは。 現在Oracle9 Pro*Cで開発をしているのですが、下記のSQLが変です。 どう変かというと・・・ (1)EXEC SQL SELECT ABC FROM DB1 WHERE A_NUM = \'1\'; (2)EXEC SQL SELECT abc FROM DB1 WHERE A_NUM = \'1\'; (3)EXEC SQL SELECT Abc FROM DB1 WHERE A_NUM = \'1\'; 元々(1)のように記述してありました。 それがある日突然データがあるのにNotFoundになって、ためしに項目名ABCをabcに変えたところ、なぜだかselectできるようになりました。 しかし(2)も今日突然データがあるのにNotFoundになり、(3)のようにAbcにかえたところ、selectできるようになりました。 大文字小文字は関係ないと誰に聞いても言われるのですが、実際今は(3)でないと同じデータでもselectできません。 今はこれでいいですが、この調子で行くときっといつか(3)でもselectできなくなり、aBcとかにしなくてはいけない日が来ると思うのです。 なんででしょう? 環境の問題とかでしょうか? 何か分かる方がいたら、よろしくお願いします。

  • 文字を数字に変換したい

    こんにちは SQL文で困っています。 SQL = "select * from LIBL.APF" SQL = SQL & " WHERE AAAA = '" & aaaa & "'" を発行した時にエラーが出ます。 SQL = "select * from LIBL.APF" SQL = SQL & " WHERE AAAA = '1000'" 直接文字列を打つと同じエラーがでます。 SQL = "select * from LIBL.APF" SQL = SQL & " WHERE AAAA = 1000" 直接数字を打つと正常に動作します。 データーベースのフィールド属性が数字なのでこのエラーが出ていると思い syanoを数字フィールドにしようと aaaa=1000+0 などやってみたのですが、計算はできても、中身は1000という文字になっているようです。 AS/400のデーターベースをCAで参照しIIS5.0で表示させたいのでフィールド属性は変える事ができませんので、どうしてもaaaaを数字にしたいのですがどうしたら良いのかわかりません どなたかご教授お願いします。

  • テーブルで使用するinについて

    select count(r.テスト1) as all_count from DB1 as r where 1=1 and ( r.テスト1 in (select distinct テスト1 from DB2 where テスト1 is not null and テスト2 is not null)); このようなSQL文がある場合は どのような意味になるのでしょうか? inといものはどのようなときに使うのでしょうか? ご教授お願いいたします。

  • 重複した行と、重複していない行をわけて出力したい。

    お世話になります。Oracle9iで、 タイトル通りですが、一つの表から 重複したレコード・重複していないレコード を出力したいのですが、「こうかな?」と思った SELECT文が30分ちかく返ってきません(^^; 他に方法があれば教えて頂きたく質問致しました。 よろしくご教授下さい! (以下のSQLで、重複した行は"exists"で、 重複していない行は"not exists"もしくは "having count(*) = 1"でできるかな? と思ってましたが・・・) テーブル名:結果 キー項目(とみなすカラム):番号・名称・年月日 出力したい項目:結果.データ・もしくは結果.* --データが複数 select a.番号,a.名称,a.年月日,a.データ from 結果 a where exists --キーの重複SELECT ( select 番号,名称,年月日,count(*) from 結果 j where j.年月日 >= '1992/04/01' and j.年月日 <= '1993/03/31' and a.番号= j.番号 and a.名称= j.名称 and a.年月日 = j.年月日 group by j.番号,j.名称,j.年月日 having count(*) > 1 )

  • 文字列のフィールドのOrderbyについて

    Oracle9iです。(厳密にはVB6も絡んでいます) 説明の便宜上、若干簡略化しています。 テーブルtestがあります。 SQL> desc test; 名前 NULL? 型 --------- -------- ---------------- ID VARCHAR2(10) です。 (1)testテーブルのデータが、 SQL> select id from test ; ID ---------- 3 5 11 551 のとき、select id from test where id between 1 and 4;を実行すると、 ID ------- 3 select id from test where id between '1' and '4';を実行すると、 ID ------- 3 11 となってしまいます。 別のケースで、 SQL> select id from test ; ID ---------- 3 5 11 551 C44433 aaa 6行が選択されました。 のデータの場合、 select id from test where id between 1 and 4;はORA-01722:数字が無効です のエラーとなり、 select id from test where id between '1' and '4';だと ID ------- 3 11 となってしまいます。 自分の希望としては select id from test where id between '1' and '4'にて、 ID ------- 3 のみ表示をさせたいです。 (2)SQL> select id from test ; ID ---------- 3 5 11 551 C44433 aaa のとき、たとえば、 select id from test where id between '12' and 'DD'; を実行し、12以上でDD以下のデータを取得したいのですが、 (理想) ID ---------- 551 C44433 実際は、 ID ---------- 3 5 551 C44433 と出てしまいます。 仕様は上司が考えてるので、 テーブル構造にそもそも問題があるのならそれ相応の説明をしたいと思っています。 ですが、基本的にはSQLの条件文を変更したいのですが、 アドバイスをいただけたらと思います。 ちなみに説明の簡略化のためフィールドを少なくしていますので select RPAD(id , 10) from test where ~ のように select のあとに変換するのはできません。 実環境は基本的には select * from ~としたいので。 よろしくお願いいたします。

  • MSDEでの大文字と小文字の区別について

    MSDEを使ってデータベースを構築しています。 基本的な質問なんですが、MSDEデータベースの中に格納したレコードについて大文字とか小文字を区別したいのですが、どうしたらいいのでしょうか? たとえば、「Picture」という項目(CHAR)が「ABC」という値のレコードをとってきたい場合、 Select * from 画像Table where Picture='ABC' というSQL文を発行すると、 「Picture」が「ABC」のレコードだけでなく「abc」のレコードもとってきてしまいます。 MSDEをインストールするときになにか、大文字小文字を区別できるようなオプションとかがあるんでしょうか? それともSQL文の書き方によってなにか対処方法があるんでしょうか? どなたか教えてください!!どうかよろしくお願いします。