利用規約の変更について

職場で沢山仕様書を読んで沢山のSQL文を作成するしか方法ないのでしょうか
私の職場はプログラムの修正が多いため新規に仕様書からSQL文を
考える機会が少なく、今あるSQL文に項目を追加するというパターンが
おおいです。そのため、複雑な仕様のSQL文を経験する機会が少ないです。
しかも、仕様書を作らずメモ書きや口頭でのプログラム作成が多いため
仕様書がなかったり古かったりで既存のコードからのSQL文の勉強
が難しいです。

皆さんは新人時代どのようにSQL文をマスターしましたか?
独学方法等を教えてください

このQ&Aに関連する最新のQ&A

A 回答 (4件)

基本的に本で独学でした。


当時主に参考にしたのは
・標準SQLガイド(C.J.DATE アスキー)
・SQL92/99標準リファレンスブック(マーチン・グルーバー ピアソン・エデュケーション
・プログラマのためのSQL(ジョー・セルコ) SQL92・99準拠
・SQLパズル
・Oracle8i&UNIXパフォーマンスチューニング
・ORACLEハイパフォーマンスチューニングSQL編
・ORACLE9i ハイパフォーマンスチューニング―STATSPACK編(廃版)
・データベースパフォーマンスアップの教科書 基本原理編

あたりでしょうか。「SQLパズル」は「SQLでこんなことができるのか」と驚かせてくれましたが、一方で「何でも無理にSQLで処理するのは避ける」きっかけになりました。
パフォーマンス・チューニングは学ぶと奥が深いですね。OSやストレージ、ネットワークの総合的な知識が求められます。
今は開発ライセンスでOracleを自分のPCにインストールして試せますし、GUIで実行計画が見られるSQL Server の Express版もあります。
実際にSQLを結構簡単に試せるので本を読みながらSQLとその実行計画を確認したりすることをお勧めします。
    • good
    • 6

私も同様の経験からSQLをマスターしました。


途中で気付いたことは「論理を組み立てる」
ということです。同業者のなかには力づくで
モノにした人もいますが、こういう人達は経験
のある所はできますが、未知の分野になると
知っている範囲からしか解決できないので、
強引な手法を採りがちです。
データベースの設計から、目的の情報を抽出
するための理論と順序を紙に書くことを進め
ます。稀に理論が破綻することがあります。
これはデータベースの設計と要求された条件に
齟齬がある場合です。
いずれにしても「論理の組み立て」は重要です。
SQLの意味は「問合せを組み立てる言語」です。
簡単なものを組み上げて複雑な解を得るのは
プログラムの基本でもあります。
    • good
    • 3

SQL文は集合をあらわす言語なので、SQL文をみて集合をイメージする訓練がいいのではないでしょうか。


その集合を他にどんなSQLで現せるか、色々なパターンを考えてみたり、それらがパフォーマンス的にどう違うのかをテストしてみたり、ここにインデックスがあったら効率がよさそうだとか、テーブル構造がこうだったらもっとシンプルになるのにとか、いろんなパターンを考えられると思います。
    • good
    • 2

SQLというのはすごーく簡単な構文しか無いじゃないですか?


簡単な英語さえ知ってれば覚える必要はありません。そういう風に出来てるのだから。覚えるより調べ方を知る事でしょうね。
SQLで大事なのは構文の効率を考える事。SQLの内部処理を理屈で理解しないと、恐ろしい構文を作る人が居ます。「SELECT * 」を頻繁に使うなど。SQLの命令文はプログラムの塊だという事をちゃんと知りましょう。
そもそもSQLとはデーターベースそのものを管理するデバイス一体の言語だという事。DBAの知識が無いと構文なんか書けても何も意味有りません。
ファンクションにするか、ストアドにするかトリガーにしてルールにするか。DBAとして理解してください。
それとトランザクションをどこで区切るか、ロールバックをしていいのかしないのか。全てはDBの性質、ハードのキャパに結びついているわけですから、本来は業務から入る必要があるわけで、そういう意味でIT屋よりも業務が解る人が簡単に覚えられるように出来ているという事です。
>皆さんは新人時代どのようにSQL文をマスターしましたか?
まず昔はSQL自体がIBM製品だけでありそこで覚えちゃいました。でもIBMのハードはOSにDB組み込みなので効率を考えなくてもある程度出来てしまった。
本当に理屈で知ったのはオープンなシステムから。サイベースのSQLSERVERですが、マイクロソフトにライセンスを売る前のSQLSERVERです。UNIXですね。マイクロソフトにライセンスを売ってからはPCでも動くようになり、個人でも使えるようになったので実験しやすくなります。その頃はMSも解説書をだしてましたから。とにかく今よりPCもひ弱だし、すぐDBが壊れるのでおかげでハードに負担なSQL文と言うのを理解できました。
http://www.shoeisha.com/mag/dbm/
今ならこんな雑誌で全然問題ないと思いますけど。
    • good
    • 1

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

QVBとVBAの違い

お世話になります。

現在、ExcelVBAで機械設計の計算をさせようと思い勉強しているのですが、VBとVBAの違い(VBと比較したとき、VBAできること、できない事)の境目?がいまいち判りません。
まだまだ勉強中で困惑しております。このままExcelVBAを勉強していく物か、VBについて勉強していくか迷っています。このままExcelVBAを勉強してExcelVBAを理解すれば判断できるかと思うのですが、畑違いの勉強になってしまわないかと心配です。

やりたいことは、各種計算の簡略化です。
現在は、関数電卓で行っていますが、これをパラメータを入力すると計算結果が出る。このような物を作りたいと思っています。

長くなってしまったのでまとめると、
1、VBAとVBの違い
2、ExcelVBAで設計計算が可能か
あと、
プログラムにより計算させるときに、最適なプログラム(JavaとかPHPとかHTML等など・・・)お勧めのプログラムがありましたらアドバイス頂けたらと思います。

Aベストアンサー

1. VBAとVBの違い

VBは単体で動作するアプリケーションが作れますが、VBAはOfficeが必要です。
また、VBAはOfficeの環境が使えるので、Excel等を使った入出力の機能が既にできていますが、VBではある程度自分で作る必要があります。また、費用的な面でVBは購入しないと使えませんが、VBAはOfficeがあれば使えますので、既にExcelなどを導入されているならば、追加の費用が必要ありません。
もし、複数の人間で作ったプログラムを利用され、かつその中にOfficeを持っていない人が含まれるのであればVBAではできませんので、VBが必要です。

2. ExcelVBAで設計計算が可能か

可能です。また、多分VBAを使わなくてもExcelの関数でもある程度のことが可能だと思われます。お持ちの関数電卓の桁数にもよりますが、相当な高精度が必要でない限り大丈夫です。

文面からすると、プログラミング未経験のようですが、やりたいことが明確なので、Excelをお持ちであればVBAで始めてみてはいかがでしょうか。他の言語(Java, C, PHP...)でも可能でしょうが、中には環境を用意しなくてはならなかったり、本質である計算以外に気にしなくてはならないことが多く、初心者にはとっつきづらいのではないかと考えます。

VBAからVBへの移行、VBからVBAへの移行はどちらも可能ですし、VBAからVBへの移行は多少時間がかかるかもしれませんが、VBよりVBAから始める方が楽なので、どちらに優越があるとは一概に言えないと思います。一人でちょっと使う程度や勉強用なら、ExcelVBAをお勧めします。
しばらくすると、ExcelVBAの限界を感じるようになると思うので、そこからVBに移行するというのでも悪くないと思います。

1. VBAとVBの違い

VBは単体で動作するアプリケーションが作れますが、VBAはOfficeが必要です。
また、VBAはOfficeの環境が使えるので、Excel等を使った入出力の機能が既にできていますが、VBではある程度自分で作る必要があります。また、費用的な面でVBは購入しないと使えませんが、VBAはOfficeがあれば使えますので、既にExcelなどを導入されているならば、追加の費用が必要ありません。
もし、複数の人間で作ったプログラムを利用され、かつその中にOfficeを持っていない人が含まれるのであればVBAではで...続きを読む

Q馬鹿すぎてPL/SQLが全然理解できません-その1

タイトルの通りで、もう50回くらい翔泳社の
「やさしいPL/SQL入門」を読んでいるのですが、
最初の変数の段階でもう頭が付いていけません(大涙
だからもう、みなさんにすがることにしました。
基本のキを優しく教えて下さい。

もちろん実際は違いますが単純化します。

表名はTBL_1

品名(CHAR),数量(NUMBER),販売日(DATE)
COKE,100,07-04-01
COKE,250,07-04-01
PEPSI,150,07-04-01
PEPSI,300,07-04-02
・・・
・・・
(旨く表示できないのでカンマで区切りました)
品名毎の日別販売量を把握するには

SELECT 販売日,品名,SUM(数量)
FROM TBL_1
WHERE 販売日 = 07-04-**
GROUP BY 販売日,品名;

で良いと思うのですが(違ったりして・・・)、やりたいことは、
1.SYSDATEにて日付を取得し、その前日(つまりは昨日)の分だけを毎日取りたい。
2.且つ実行結果をSPOOLでテキストに吐き出したい。
の2つです。
これをPL/SQLで実現するにはどうしたらいいのでしょう?
ダイレクトなお答えをいただけるとうれしいです。
いただいた回答を基に、もう一度本を読み直してみます。

SYSDATEを、宣言した変数に格納し、その変数をSELECT文にあてはめる
(上記例の07-04-**の部分)、という考えから抜け出せないのです。
何故にカーソルという物が必要なのかが理解できないのです。
きっとエクセルVBAしか知らないからなのです。

タイトルの通りで、もう50回くらい翔泳社の
「やさしいPL/SQL入門」を読んでいるのですが、
最初の変数の段階でもう頭が付いていけません(大涙
だからもう、みなさんにすがることにしました。
基本のキを優しく教えて下さい。

もちろん実際は違いますが単純化します。

表名はTBL_1

品名(CHAR),数量(NUMBER),販売日(DATE)
COKE,100,07-04-01
COKE,250,07-04-01
PEPSI,150,07-04-01
PEPSI,300,07-04-02
・・・
・・・
(旨く表示できないのでカンマで区切りました)
品名毎の日...続きを読む

Aベストアンサー

>宣言部で記述されるSELECT文で返される1行、あるいは複数行の、
>行そのものが変数という扱いなのだろうか。
行はクラス、列はメンバ変数と考えたほうがわかり易いと思います

>実行部はそれを一行ずつ取り出して加工しているのだろうか。
FETCHで1行ずつ取り出します(参考URL参照、類似の質疑応答:http://okwave.jp/qa2929010.html)

>仮にそうだとしたら、WHERE句の値を様々に変えたい時はどうしたらい>いのだろうか。
動的SQLで解決します(参考URL参照)

>最終的な結果をどうやってテキストに吐き出すのだろうか。
set serveroutput on;
をまずPS/SQLの1行目に記述しておいて
dbms_output.put_line で画面に出力させて、これをSPOOLしてもいいし、(参考URL参照)

utl_file.fopen
utl_file.put_line
utl_file.fclose
を使用して、直接ファイル出力してもいいと思います(参考URL参照)

以下サンプルソース(テスト環境無いので未実行です)
SQL> set serveroutput on
SQL> spool /testdata.csv
SQL> declare
begin
for cu_rec in (※1) loop
dbms_output.put_line (cu_rec.csvrow);
end loop;
end;
/
spool off

<※1の部分>
SELECT 販売日|| ',' || 品名 || ',' || SUM(数量) csvrow ←CSV形式のカンマ区切り編集です
FROM TBL_1
WHERE 販売日 = TO_CHAR(SYSDATE-1,'YY-MM-DD')
GROUP BY 販売日,品名

参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_pl05.htm

>宣言部で記述されるSELECT文で返される1行、あるいは複数行の、
>行そのものが変数という扱いなのだろうか。
行はクラス、列はメンバ変数と考えたほうがわかり易いと思います

>実行部はそれを一行ずつ取り出して加工しているのだろうか。
FETCHで1行ずつ取り出します(参考URL参照、類似の質疑応答:http://okwave.jp/qa2929010.html)

>仮にそうだとしたら、WHERE句の値を様々に変えたい時はどうしたらい>いのだろうか。
動的SQLで解決します(参考URL参照)

>最終的な結果をどうやってテキストに...続きを読む

Qシングルクォーテーションとダブルクォーテーション

いつも楽しく拝見させて頂いています。
初心者ですが宜しくお願いします。
シングルクォーテーションとダブルクォーテーションの使用方法について質問させて頂きます。
select文でテーブル名を指定するときはそのまま(たとえば'名前'じゃなく名前)しないとエラーになります。そういう風なシングルクォーテーション(又はダブルクォーテーション)を使ってはいけないところ、またシングルクォーテーションにしないといけないところ、ダブルクォーテーションにしないといけないところを教えて頂けますでしょうか?もし両方OKならその違い等も教えていただけるとうれしいです。
以上宜しくお願いします。

Aベストアンサー

文字定数は、「'」で囲む必要があります。

例)SELECT 'ABC' →文字定数の'ABC'と解釈される
SELECT ABC →ABCは、表名や列名と解釈される

数値定数は、多くのRDBMSでは「'」で囲みませんが、MySQLでは独自仕様として囲むことが可能です。

例)SELECT 123 →数値定数の123
SELECT '123' →一般的なRDBMSでは文字として扱われる。MySQLでは数値としても扱える

殆どのRDBMSには予約語があり、RDBMSでは予約語を頼りに構文解析します。表名や列名に英単語やその組み合わせを使おうとすると、予約語とぶつかってしまうことがあります。

例)SELECT FROM FROM →予約語のSELECT FROMの間に「*」や列名が指定されておらず、RDBMSは構文誤りと認識する

それを回避するために、標準SQLでは「"」で表名や列名を囲みます。MySQLでは、文字コードにANSIを使う場合は、「"」で、それ以外には独自仕様で「`」(バッククォーテーション)を使います。

例)SELECT "FROM " FROM →多くのRDBMSでは「"」で囲むことで、RDBMSに最初の「FROM」は、列などの名前であることを知らせる
SELECT `FROM` FROM →ANSI以外のMySQLでは、「`」(バッククォーテション)で囲む

また、「-」(ハイフォン)を表名や列名に使う場合、「"」で囲まないと、SQLでは減算と解釈されます。このように、「"」で囲むことで、記号なども名前に使用することができます。

例)SELECT ABC-DEF →列ABCと列DEFの減算と解釈される
  SELECT "ABC-DEF" →列「ABC-DEF」と解釈される
  SELECT `ABC-DEF' →ANSI以外のMySQLでは、「"」でなく「`」(バッククォーテション)を使用

文字定数は、「'」で囲む必要があります。

例)SELECT 'ABC' →文字定数の'ABC'と解釈される
SELECT ABC →ABCは、表名や列名と解釈される

数値定数は、多くのRDBMSでは「'」で囲みませんが、MySQLでは独自仕様として囲むことが可能です。

例)SELECT 123 →数値定数の123
SELECT '123' →一般的なRDBMSでは文字として扱われる。MySQLでは数値としても扱える

殆どのRDBMSには予約語があり、RDBMSでは予約語を頼りに構文解析します。表名や列名に英単語やその組み合わせを使おうとすると、予...続きを読む

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

Qデータベース内のテーブル名の取得

お世話になります。
初心者的な質問でしたらすいません。
SQL文にてデータベース内のテーブル名を
調べることができると聞いたことがあるのですが、
可能でしょうか。

もし、可能であれば、SQLの記述を教えてください。
お願いします。

Aベストアンサー

select * from tab;

私の場合、テーブル名だけ手っ取り早く知りたいとき、↑を打ちます。その他の情報も知りたいときは#2さんの仰るとおり、user_tablesで取得します。

Q学校の課題のSQLでVIEWの意味と作成方法がわかりません。

学校でSQLを使って、データベースを作るという期末課題がでました。

当方バイクの知識が少々あるため、バイクとバイク販売店というデータベースを作ってみることにしました。

バイクのデータ100個分とお店のデータは10個ほどなのですが、課題の条件の中にVIEWを作成すること、とあるのですが、VIEWとは何者なのでしょうか?
授業のページを見ても、難しい事しか載っていなくて困っています。

またテーブルの入力と、データの入力はなんとか覚えたのですが、VIEWの作り方は全く意味がわかりません。なので・・・

VIEWの意味と役割を教えてください。
初心者なので出来るだけわかりやすく教えていただけたら幸いです。
またVIEWの作成方法(create viewだとかなんとか・・・)を教えてください。
ちなみにテーブルデータとかはこんな感じに作っております。なのでこんな感じでVIEWの作成方法をご教授いただけたらありがたい次第です。
create table bike(
  maker text,
name text,
size int,
nennshiki date,
kaizou text,
shaken text,
nedann float,
shop text
)

よろしくお願いいたします。

学校でSQLを使って、データベースを作るという期末課題がでました。

当方バイクの知識が少々あるため、バイクとバイク販売店というデータベースを作ってみることにしました。

バイクのデータ100個分とお店のデータは10個ほどなのですが、課題の条件の中にVIEWを作成すること、とあるのですが、VIEWとは何者なのでしょうか?
授業のページを見ても、難しい事しか載っていなくて困っています。

またテーブルの入力と、データの入力はなんとか覚えたのですが、VIEWの作り方は全く意味がわか...続きを読む

Aベストアンサー

#1回答者です。

バイクは詳しくないので、自動車の例で説明します。

一つの表で、メーカー名や車種名などを管理すると、冗長な情報を管理することになってしまいます。

=====表定義例=====
create table メーカー
(メーカーid smallint primary key,
メーカー名 varchar(16));

create table 車種
(メーカーid smallint,
車種id smallint,
車種名 varchar(30),
primary key(メーカーid,車種id));

create table 型名情報
(メーカーid smallint,
車種id smallint,
型名 varchar(30) primary key,
年式 smallint,
排気量 smallint,
定価 int);
create index 型名情報idx on 型名情報(メーカーid,車種id);
=====ここまで=====

このように分けることで、メーカー名を車の情報分、持たなくてすみます。
仮にメーカー名が変更になった場合は、「メーカー」表のみを更新すればよくなります。

「マーチ」といった車種で、いろいろな年式があるでしょうから、車種名と年式といった情報も、表を分けます。

このようにして置くと、情報変更時の更新箇所が限られるし、メーカーの検索、車種名の検索といったことが容易に行えます。

=====データ例=====
insert into メーカー values(1,'TOYOTA');
insert into メーカー values(2,'NISSAN');
insert into メーカー values(3,'HONDA');

insert into 車種 values(1,1,'カローラ XXXX');
insert into 車種 values(1,2,'クラウン XXXX');
insert into 車種 values(2,1,'スカイライン XXXX');
insert into 車種 values(2,2,'マーチ');
insert into 車種 values(3,1,'アコード');

insert into 型名情報 values(1,1,'ABC-DEF-1234',2003,1600,150);
insert into 型名情報 values(1,1,'ABC-DEF-1240',2005,1600,160);
insert into 型名情報 values(1,2,'ABC-XYZ-1111',2005,2000,250);
insert into 型名情報 values(2,1,'EFGH-IJK-LMN-12',2002,2000,200);
insert into 型名情報 values(2,2,'HIJK-LMN-OPQ-20',2005,1600,120);
insert into 型名情報 values(3,1,'XY-ZABC-DE-12345',2003,2000,200);
=====ここまで=====

いよいよ検索です。
三つに分けた表から、メーカー名や車種名、年式といった情報を検索します。

=====検索SQL例=====
select x.メーカー名,y.車種名,年式,排気量,定価
from (メーカー as x
left join 車種 as y
on x.メーカーid=y.メーカーid)
left join 型名情報 as z
on y.メーカーid=z.メーカーid and y.車種id=z.車種id;
=====ここまで=====

少し複雑になってしまいました。
これをビューにして登録しておき、検索SQLは簡単に記述できるようにしてしまいます。

=====ビュー定義例1=====
create view 車検索
as
select x.メーカー名,y.車種名,年式,排気量,定価
from (メーカー as x
left join 車種 as y
on x.メーカーid=y.メーカーid)
left join 型名情報 as z
on y.メーカーid=z.メーカーid and y.車種id=z.車種id;
=====ここまで=====

このビューを利用して検索する場合、検索SQLは以下のように簡単に記述できます。

=====ビューを使った検索1=====
select * from 車検索;
=====ここまで=====

ビューで、特定のデータのみ見せる(他のデータは見せない)ことが可能です。
例えば上述のビューを「TOYOTA」の車種のみを見せるビューに変えてみます。

=====ビュー定義例2=====
drop view 車検索;
create view 車検索
as
select x.メーカー名,y.車種名,年式,排気量,定価
from (メーカー as x
left join 車種 as y
on x.メーカーid=y.メーカーid)
left join 型名情報 as z
on y.メーカーid=z.メーカーid and y.車種id=z.車種id
where x.メーカー名='TOYOTA';
=====ここまで=====

以下の検索(「ビューを使った検索1」と同じ)を行うと、今度は「TOYOTA」の車種しか見えなくなります。

=====ビューを使った検索2=====
select * from 車検索;
=====ここまで=====

このようにビューを使うと、特定のデータだけ見せたり、SQLを簡単にできるといったメリットがあります。

#1回答者です。

バイクは詳しくないので、自動車の例で説明します。

一つの表で、メーカー名や車種名などを管理すると、冗長な情報を管理することになってしまいます。

=====表定義例=====
create table メーカー
(メーカーid smallint primary key,
メーカー名 varchar(16));

create table 車種
(メーカーid smallint,
車種id smallint,
車種名 varchar(30),
primary key(メーカーid,車種id));

create table 型名情報
(メーカーid smallin...続きを読む

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

Q日数算出SQL

すみません教えてください。
DB→Oracle9iで「日付A」と「日付B」の間の日数を表示させようとしているのですが、うまくいきません。
参考書などでは、「Months_Between関数」でも試してみたのですが、うまくいきません。単純なやりかたあればおしえていただきたいのですが、よろしくお願いいたします。

Aベストアンサー

こんにちは。

Months_Betweenは、差分を月で表す場合に使います。
この場合は1ヶ月未満は小数になってしまいますね・・・。

日付だけでいいなら単純に引き算します。
SELECT to_date(日付A)-to_date(日付B)
FROM テーブル
です。
(^^ゞ

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。


人気Q&Aランキング

おすすめ情報