• 締切済み

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に値がない場合もある

  • Oracle
  • 回答数1
  • ありがとう数1

みんなの回答

回答No.1

これでどうですか? UPDATE T_TEST SET 列2 = SUBSTR(列1, 1, INSTR(列1, '×') - 1), 列3 = LENGTH(TO_NUMBER(SUBSTR(列1, INSTR(列1, '×') + 1))) - 1

g000000000000
質問者

お礼

ありがとうございました

関連するQ&A

  • 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)処理

  • 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を教えてください よろしくお願いいたします

  • 列の桁数変更の方法 (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文(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文を教えてください

  • 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文の書き方について

    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 などと書けば良いのでしょうか?

  • ProC 固定SQLでNULLってどう表現するの?

    <テーブル> T1 C1 VARCHAR2(7) NOTNULL   C2 NUMBER(13)   C3 VARCHAR2(8) <プログラム> VARCHAR hT1_C1[7]; VARCHAR hT1_C2[13+1]; VARCHAR hT1_C3[8]; short iT1_C1; short iT1_C2; short iT1_C3; EXEC SQL INSERT INTO T1 ( T1.C1, T1.C2, T1.C3 ) VALUES ( :hT1_C1 INDICATOR :iT1_C1, TO_NUMBER(:hT1_C2), :hT1_C3 INDICATOR :iT1_C3 ) ; <事象> SQLエラー[-1485]が発生 <補足> C1、C2はNULL以外の値を設定。 C3はNULLを設定。 hT1_C3.arr = ""; hT1_C3.len = 0; iT1_C3 = -1; <質問> 1、NULLの設定方法が間違っているのでしょうか? 2、上記プログラムの「EXECSQL~」の部分を変更せずに解消する方法はあるのでしょうか? 3、SQLエラーコード「-1458」は、どのような場合に発生するのでしょうか? 以上、回答お願いいたします。

  • SQLについて質問です。

    今あるテーブル1のカラムA(number型)と 全く同じテーブルにあるカラムB(varchar型)を つなげて (number型) IS (varchar型) A IS B … のように真ん中に『IS』を挟んで データを全て出したいのですが、 SQLの書き方がよくわかりません。 自分では select A ||'(' || IS || ')'|| B from table1 のように書くのでは?と思っていますが、 全く上手くデータをこの形で出すことができません。 このデータを出すためには どういったSQLを書けばよろしいのでしょうか? よろしくお願いします。

  • テーブルの結合?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の場合でも、データ抽出する為に上記の方法では駄目でした。 どのようにすれば思い通りの結果を取得できますか? とても困っていますので、よろしくお願いいたします。

  • PL/SQLでファンクション名に変数を使用するには

    PL/SQLでファンクションの呼出を行いたいと思っています。 そこでファンクション名を変数で指定したいと思っているのですがうまくいきません。 ファンクション FUNCTION Check ( pi_Syori_No   IN NUMBER,  -- 処理No. po_Function_Name OUT VARCHAR2  -- ファンクション名 ) RETURN BOOLEAN IS TYPE Test_List IS VARRAY(100) OF VARCHAR2(10) NOT NULL; TYPE FcNameList IS VARRAY(100) OF VARCHAR2(10) NOT NULL; MmsCheckList Test_List := Test_List('○','×'); FcNameCheckList FcNameList := FcNameList('Check','Check'); BEGIN IF MmsCheckList(pi_Syori_No) = '○' THEN po_Function_Name :=FcNameCheckList(pi_Syori_No); ELSE po_Function_Name :=NULL; END IF; RETURN TRUE; EXCEPTION WHEN OTHERS THEN RETURN FALSE; END Check; メイン CREATE OR REPLACE PROCEDURE Test ( po_Out OUT VARCHAR2 ) IS Modoriti BOOLEAN :=TRUE; F_Neme VARCHAR2(2000) :=NULL; BEGIN IF Check(1,F_Neme) = TRUE THEN Modoriti := F_Neme(2,F_Neme); END IF; EXCEPTION WHEN OTHERS THEN po_Out := 'エラー'; END Test; この状態で実行すると下記のエラーが出てしまいます。 [PLS-00222: この有効範囲内に、名前'F_Neme'の関数は存在しません。] ファンクション名に変数を使うのは無理なのでしょうか? よろしくお願いいたします。