• ベストアンサー

SQL文を教えてください

下記表があり、列0のデータを条件に, 列1,列2,列3の値を更新する方法を教えてください 表 :t_test 列0:管理No t_test_no VARCHAR2(7) NOT NULL PRIMARY KEY 列1:値(文字) t_test_data VARCHAR2(20) 列2:値(数値) t_test_suu NUMBER(3,2) 列3:値(数値) t_test_jousuu NUMBER(1,0) データ例 列0, 列1, 列2, 列3 A000001, abc, 1.2, 0 A000002, Null, Null, Null A000003, a1b2c3, 1.23, 2 A000004, opqrstuv, 0.2, 4 A000005, あいう, 0, 1 列0 条件のデータは必ず既存するものとする つまり、更新(update)処理

  • Oracle
  • 回答数4
  • ありがとう数5

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

  • ベストアンサー
  • arne
  • ベストアンサー率83% (5/6)
回答No.4

Nullの更新については下記のお話の通りだと私も思います。 長さ0の文字列('')とNullの等価性については、Oracleのバージョン、IS NULL関数の動き、条件設定時、マニュアルの表記など いまいち同期が取れていず、ややこしい問題です。 やっぱり、私個人の感覚ですが、長さ0の文字列≒Nullと認識して 更新時は''ではなく、一括でNullを使用した方が固いと思います。 あと、これも良く解らなかったのですが Excelのデータを一括してOracle側に更新したいと言う事でしょうか? でしたら、Excel側に格納されているデータにもよるのですが、 少し工夫して、NVL関数やDECODE関数、LENGTH、TRIM系を駆使する必要があるかもしれません。 あ、ご存知かもしれませんが、DECODE関数はレスポンスが悪化します。 万を超える件数をUPDATEする時はご注意下さい。苦情がきます。笑。

g000000000000
質問者

お礼

ありがとうございました うまく出来ました

その他の回答 (3)

回答No.3

>数値型列のnull、文字型列のnullのupdate方法 >を教えてください。 列の型が数値、文字に関係なく、nullで更新できる はずです。これはSQLの標準仕様です。 update t_test set t_test_data = Null, t_test_suu = Null, t_test_jousuu = Null where t_test_no = 条件

g000000000000
質問者

お礼

ありがとうございました うまく出来ました

回答No.2

>列0を条件に、 > 数値型列のnull、文字型列のnullのupdate方法 >を教えてください。 where t_test_suu is null or t_test_jousuu is null で、数値列2列のいずれかが、nullであるデータを対象とします。 >理由といたしまして、多数のデータをexcelに存在しており、・・・ このくだりは、オラクルにどう関わるのか?判らないので、理解不能です。(^^;

g000000000000
質問者

お礼

ありがとうございました うまく出来ました

  • arne
  • ベストアンサー率83% (5/6)
回答No.1

update t_test set t_test_data = なにか, t_test_suu = なにか, t_test_jousuu = なにか where t_test_no = 条件 ですが、これだとただのupdate文ですから、初歩中の初歩ですよね。 お聞きになっている意味が違いますか?

g000000000000
質問者

お礼

早速のご回答ありがとうございます 列0を条件に、  数値型列のnull、文字型列のnullのupdate方法 を教えてください。 下記でしょうか?? update t_test set t_test_data = '', t_test_suu = Null, t_test_jousuu = Null where t_test_no = 条件 理由といたしまして、多数のデータをexcelに存在 しており、それを一括で更新したいと考えています

関連するQ&A

  • SQLを教えてください

    下記表があり、列1のデータを列2,列3に分割する方法を 教えてください 表 :t_test 列0:管理No t_test_no VARCHAR2(7) NOT NULL PRIMARY KEY 列1:値(文字) *.**×10の乗数 t_test_data VARCHAR2(20) 列2:値(数値) 列1の「*.**」の部分 t_test_suu NUMBER(3,2) 列3:値(数値) 列1の「10の乗数」の部分 t_test_jousuu NUMBER(1,0) データ例 列0, 列1, 列2, 列3 A000001, 1.20×1, 1.2, 0 A000002, Null, Null, Null A000003, 1.23×100, 1.23, 2 A000004, 0.20×10000, 0.2, 4 A000005, 0.00×10, 0, 1 (補)列1に値がない場合もある

  • SQL文を教えてください

    Oracle8i 表構成は下記です。データ例も下記です 表:T_GEN 列:T_GEN_NO,T_GEN_CUST,T_GEN_GEN,T_GEN_SUU,T_GEN_DATE 2-40821,10000001 ,20302 ,12 ,2005/09/13 2-41001,10000001 ,20302 ,10 ,2005/09/13 2-41001,10000003 ,20302 ,1 ,2005/09/13 2-41001,10000001 ,20304 ,5 ,2005/09/13 上記レコードをselectし、 列:T_GEN_CUST,T_GEN_GEN が異なる また、T_GEN_CUST,T_GEN_GEN が同じものは、 T_GEN_SUUを合計する 上記例の場合 レコード数:3 レコード内容を下記 T_GEN_CUST,T_GEN_GEN,T_GEN_SUU 10000001 ,20302 ,22 10000003 ,20302 ,1 10000001 ,20304 ,5 このようにデータ取得するSQLを教えてください よろしくお願いいたします

  • SQL文の書き方について

    SQL初心者です。 教えてください。 A表とB表があります。 A表の伝票Noの列の値とB表の伝票Noの列の値はイコールです。 判定はB表のある別のカラム(sample)と変数Zに格納されている値がイコールという 条件で合致するA表のデータを抽出したいです。 LEFT JOINもしくはINNER JOINなどを使って書けば良いのでしょうか? 例えば SELECT * from A表 INNERJOIN B表 on A表.伝票No = B表.伝票No where B表.sample = 変数Z などと書けば良いのでしょうか?

  • SQL文(FORMAT)を教えてください

    表:TBL_LIST  列1:TBL_LIST_DATA = ABCDE のデータ(VARCHAR2(5))  列2:TBL_LIST_NO = 12345 のデータ(NUMBER(10)) があります 上記の列データの  (1)列1の左から2文字  (2)列1の右から3文字  (3)列2の左から2文字  (4)列2の右から3文字 をselectするSQL文を教えてください

  • 列の桁数変更の方法 (oracle 8i)

    oracle 8.1.7 を使用 下表の列2を下記のように変更したいのですが 方法(SQLplusにて)が分かりません、 ご教示くださいますようよろしくお願いいたします (変更前)列2:T_MIX_PTN VARCHAR2(1) NOT NULL (変更後)列2:T_MIX_PTN VARCHAR2(3) NOT NULL 表 :T_MIX ---------------------------------------- 列1:T_MIX_CD VARCHAR2(4) NOT NULL 列2:T_MIX_PTN VARCHAR2(1) NOT NULL 列3:T_MIX_CNT NUMBER(1,0) NOT NULL 列4:T_MIX_GCD1 VARCHAR2(6) NOT NULL 列5:T_MIX_GRATE1 NUMBER(4,1) NOT NULL 列6:T_MIX_GCD2 VARCHAR2(6) NOT NULL 列7:T_MIX_GRATE2 NUMBER(4,1) NOT NULL

  • テーブルの結合?SQL文を教えてください。

    どうしても自分で解決できなかったので、教えてください。 2つのテーブル(AとB)から結果(☆)を取り出したいです。 テーブルレイアウトと値は下記の通りです。 テーブルA(A_NO DAT_NOが主キー) A_NO DAT_NO B_NO C_NO D_NO 0001 1 100 1000 Null 0001 2 Null Null A001 0001 3 200 2000 Null 0001 4 200 2000 A002 0001 5 300 3000 A003 テーブルB(B_NO C_NOが主キー) B_NO C_NO D_NO LEN DIV 100 1000 A001 10 01 100 1000 A002 10 01 100 1000 A003 Null Null 100 1000 Null Null Null 200 2000 A002 Null Null 200 2000 Null Null Null 300 1000 A001 30 03 300 3000 Null Null Null 下記のような結果が欲しいです。 結果(☆) A_NO DAT_NO B_NO C_NO D_NO LEN DIV 0001 1 100 1000 Null 10 01 0001 2 Null Null A001 Null Null 0001 3 200 2000 Null Null Null 0001 4 200 2000 A002 Null Null 0001 5 300 3000 A003 30 03 元々はテーブルAとテーブルBを、テーブルAのB_NOとC_NOとテーブルBのB_NOとC_NOを条件に結合(LEFTJOIN)していました。 しかしテーブルAのB_NOとC_NOがNULLの場合でも、データ抽出する為に上記の方法では駄目でした。 どのようにすれば思い通りの結果を取得できますか? とても困っていますので、よろしくお願いいたします。

  • SQL 回答を教えてください。

    TEST 表に TNO 列、AREA 列、CLASS 列、SCORE 列、ADJUST 列、BIRTH 列があるとします。 この TEST 表から、TNO 列、AREA 列の頭 3 桁、SCORE 列の 1/10、SCORE 列の値に ADJUST列の値 を加算した値、および BIRTH 列の月末日を表示する SQL 文を 1 つ作成してください。SCORE 列の値の 1/10 は、小数点以下を四捨五入してください。BIRTH 列の月末日は、YYYY/MM/DD の書式で表示してください。SCORE 列には NULL 値はふくまれていませんが、ADJUST 列に NULL 値がふくまれている行もあるとします。ADJUST 列の NULL 値は、0 として計算してください。

  • SQL文を教えてください

    1-a,1-b,2-a,2-b,3-a,3-b,4-a,4-b,5-a,5-bというカラムがあるとき。 以下の条件を満たす行を抽出するのに、 検索速度の早いSQLの書き方はありますか? (条件)N-aに値有りのとき、N-bは値有り  ただし、1-aから5-a全て値なしのときは対象外 ※こんな書き方は思いつくのですが、遅そうで・・・ ( (1-a is not null AND 1-b is not null) or (2-a is not null AND 2-b is not null) or (3-a is not null AND 3-b is not null) or (4-a is not null AND 4-b is not null) or (5-a is not null AND 5-b is not null) ) and not(1-a is null AND 2-a is null AND 3-a is null AND 4-a is null AND 5-a is null)

  • SQL文 教えて下さい。

    以下のようなデータがあります。 ・列Aにはが1~300までの値が格納。 ・列BにはA~Zまでの値が格納。 列B、A~Zの値に対して、 列Aの値は列1~300の値を複数持つことができます。 列A 列B ----------- 1 A 2 A 3 A 6 A 1 B 3 B  : このとき、列Aの値のうち、1~10までの値を全て持つ列Bの値を抜き出すにはどういったSQL文を記述すればよいでしょうか。 よろしくお願いします。

  • SQL文で

    T-SQLを使用しています。 下記のような場合どのようにSQL文を組めばよいのでしょうか?Group byを使用すると思うのですが・・・ テーブル名:SampleTbl フィールド1:ID(プライマリ) フィールド2:Name(varchar(4)) 【名前】 フィールド3:UpTime(varchar(16))【更新時刻】 ※UpTimeの概要 yyyyMMddhhmmssss 2004/06/01 12:00:0000 中身 1,鈴木,2004060112000000 2,鈴木,2004060112050000 3,鈴木,2004060112100000 4,鈴木,2004060112200000 5,山田,2004060112000000 抽出条件: 同一の名前で更新日が5分以内の範囲で更新されているデータのみ抽出する 抽出結果 1,鈴木,2004060112000000 2,鈴木,2004060112050000 3,鈴木,2004060112100000 上記の抽出結果を取得するにはどのようにすればよいか、ご教授お願い致します。