• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PLSQLのTO_CHARについて)

PLSQLのTO_CHARについて

このQ&Aのポイント
  • PLSQLのTO_CHARを使った値の変換で頭にスペースが入らないようにする方法について教えてください。
  • ORACLE19gのPLSQLでストアドプロシジャを作成していますが、TO_CHARの結果にスペースが入ってしまいます。対処方法を教えてください。
  • TO_CHARを利用してvCntの値を指定した形式に変換する際、頭にスペースが入ってしまう問題が発生しています。対策方法を教えてください。

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

  • ベストアンサー
  • Yeti21
  • ベストアンサー率47% (396/830)
回答No.1

下記のFORMAT指定でどうでしょうか? TO_CHAR(vCnt, 'FM00000') ちなみに、符号用として1桁確保しているようです。 FMを付けると前後のスペースを取り除きます。

tatsurou
質問者

お礼

Yeti21さん 回答ありがとうございます。 教えて頂いた方法で空白が取れました。

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

関連するQ&A

  • PLSQLで和暦で一年前の値を求める

    PLSQLで和暦で一年前の値を求めるためにadd_monthsを使いたいのですがoracle10ではうまく機能しません。 to_char(add_months(1803,-1),yymm) 1703という値を取得したいのですがどうすればよいのでしょうか?

  • PLSQLで

    PLSQL(Oracle9.i)で以下のことをしようとしています。 しかし、コンパイルは通るがステップ実行すると固まります。 -- 宣言部 TYPE REC_A IS RECORD( a NUMBER, b NUMBER, c NUMBER, d NUMBER, e NUMBER, f NUMBER, g NUMBER, ); TYPE B_TBL IS TABLE OF REC_A INDEX BY BINARY_INTEGER; TYPE C_TBL IS TABLE OF B_TBL INDEX BY BINARY_INTEGER; D_TBL C_TBL; -- 関数部 FOR i IN 1..3 LOOP  FOR J IN 1..3 LOOP   D_TBL(I)(J).a := 1;   D_TBL(I)(J).b := 2;   D_TBL(I)(J).c := 3;   D_TBL(I)(J).d := 4;   D_TBL(I)(J).e := 5;   D_TBL(I)(J).f := 6;   D_TBL(I)(J).g := 7;  END LOOP; END LOOP; なにぶんまだPLSQLの勉強始めて1ヶ月満たないもので、分からないことをどう伝えればいいのかも分からない状況です。 処理的には、D_TBL(I)(J)に値をいろいろセットし集計をとりCSVにはきだす処理です。 これだけでは分からないかもしれませんが、よろしくお願いします。

  • oracle10g eucのblobをsjisのcharに変換したい

    oracle10g eucのblobをsjisのcharに変換したい oracle10gでblob型でeuc_jpの文字列を格納しています これをshift_jisのvarchar2に変換したいのですが 無理でしょうか? utl_raw.cast_to_nvarchar2では文字化けしました

  • PLSQL CHARの項目を使用した計算

    Oracle8iのストアドプロシジャを作成しています。 SELECT SYSDATE で取得したシステム時間から任意時間前の時刻を算出し、CHAR(16)の文字列(YYYYMMDDHHMMSSMS)にしたいのですが、 うまくいきません。 次のようなやり方をしています。 (1)システム時刻を取得し、CHAR型変数へ格納。 (2)時、分、秒ごとにCHAR型の変数へセット。 (3)TO_NUMBER関数でNUMBER型へ変換して、NUMBER型変数に格納。 (4)任意時間前の時刻の算出。 SQLPLUSの標準出力にログを出して確認したところ、分や秒(W_CHECK_SS )がマイナスになってしまいます。 どのようにすればうまくいくのかアドバイスをいただけたらと思います。 今は以下のように書いています。 CREATE OR REPLACE PROCEDURE TESTSP ( IN_KIJUN_TIME IN NUMBER --監視基準時間(秒) ) IS W_CURRENT_TIME16 CHAR(16); --システム時刻(16桁) W_CURRENT_TIME14 CHAR(14); --システム時刻(14桁) W_CURRENT_YYYYMMDD CHAR(8); --システム時刻(YYYYMMDD) W_CURRENT_HH NUMBER(2); --システム時刻(HH) W_CURRENT_MM NUMBER(2); --システム時刻(MM) W_CURRENT_SS NUMBER(2); --システム時刻(SS) W_CURRENT_HH_STR CHAR(2); --システム時刻(HH)CHAR型 W_CURRENT_MM_STR CHAR(2); --システム時刻(MM)CHAR型 W_CURRENT_SS_STR CHAR(2); --システム時刻(SS)CHAR型 W_CHECK_SEC NUMBER(5); --基準前時刻(計算用) W_CHECK_HH NUMBER(2); --基準前時刻(HH) W_CHECK_MM NUMBER(2); --基準前時刻(MM) W_CHECK_SS NUMBER(2); --基準前時刻(SS) W_CHECK_HMS CHAR(16); --基準前時刻(16桁) BEGIN /*-- システム時刻の取得 --*/ SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') INTO W_CURRENT_TIME14 FROM DUAL; -- ◆DEBUG START DBMS_OUTPUT.PUT_LINE('・システム時刻14 = ' || W_CURRENT_TIME14); -- ◆DEBUG END /*-- 基準前時刻の計算 --*/ W_CURRENT_YYYYMMDD := SUBSTR(W_CURRENT_TIME14,1,8); W_CURRENT_HH_STR := SUBSTR(W_CURRENT_TIME14,9,2); W_CURRENT_MM_STR := SUBSTR(W_CURRENT_TIME14,11,2); W_CURRENT_SS_STR := SUBSTR(W_CURRENT_TIME14,13,2); W_CURRENT_HH := TO_NUMBER(W_CURRENT_HH_STR); W_CURRENT_MM := TO_NUMBER(W_CURRENT_MM_STR); W_CURRENT_SS := TO_NUMBER(W_CURRENT_SS_STR); -- W_CHECK_SEC := W_CURRENT_HH * 3600 + W_CURRENT_MM * 60 + W_CURRENT_SS - IN_KIJUN_TIME; W_CHECK_HH := W_CHECK_SEC / 3600; W_CHECK_SEC := W_CHECK_SEC - (W_CHECK_HH * 3600); W_CHECK_MM := W_CHECK_SEC / 60; W_CHECK_SS := W_CHECK_SEC - (W_CHECK_MM * 60); W_CHECK_HMS := W_CURRENT_YYYYMMDD || W_CHECK_HH || W_CHECK_MM || W_CHECK_SS || '00'; -- ◆DEBUG START DBMS_OUTPUT.PUT_LINE('・W_CHECK_HH = ' || W_CHECK_HH); DBMS_OUTPUT.PUT_LINE('・W_CHECK_MM = ' || W_CHECK_MM); DBMS_OUTPUT.PUT_LINE('・W_CHECK_SS = ' || W_CHECK_SS); -- ◆DEBUG END (以下省略) 【標準出力】 SQL> EXEC TESTSP(60); ・引数:監視基準時間(秒) = 60 ・システム時刻14 = 20070308222543 ・システム時刻(YYYYMMDD) = 20070308 ・W_CHECK_HH = 22 ・W_CHECK_MM = 25 ・W_CHECK_SS = -17 ※システム時刻[22:25:43]の60秒前は22:24:43なので、 [2007030822244300]という文字列を作成したいのです

  • 同一表に同一データがある場合のPLSQLの挙動

    お世話になります。 Oracle+PLSQL初心者です。 特定のPLSQLを発行した際の、同一データが同じ表内にある場合の動作について混乱しています。 条件を満たす列に対して値+100の反応を期待しているのですが、思うような結果が返ってきません。 偶然に上記挙動が発生し、同一データの重複が問題かなと問題のなさそうな表をつくり直したら同現象は発生しなくなりました。 1. 同じ表に2度同じデータをインサート(同一データが2つある状態) ID NAME SAL DEPT 1 TARO 0 10 2 HANAKO 100 20 1 TARO 0 10 2 HANAKO 100 20 2. 特定条件下(sal<1000, deptno=10)でsalが+100になるPLSQLを発行、COMMIT DECLARE CURSOR emp_cur IS SELECT sal, empno FROM emp WHERE deptno = 10; BEGIN FOR emp_rec IN emp_cur LOOP IF emp_rec.sal < 1000 THEN UPDATE emp SET sal = sal + 100 WHERE empno = emp_rec.EMPNO; END IF; END LOOP; END; / COMMIT; 3. SELECTでSALを確認すると200増えている(2倍) ID NAME SAL DEPT 1 TARO 200 10 2 HANAKO 100 20 1 TARO 200 10 2 HANAKO 100 20 個人的には下記のような値になると思っていました。 言葉で説明するのが難しいのですが、心当たりのある方がいらっしゃったらお答え願います。 よろしくお願い致します。 ID NAME SAL DEPT 1 TARO 100 10 2 HANAKO 100 20 1 TARO 100 10 2 HANAKO 100 20

  • ストアドをSQL*PLUSで実行したい。

    こんにちわ。 いまORACLE10gのPLSQLでストアドプロシジャを作成しています。 CREATE OR REPLACE PROCEDURE procXXXXXXXX ( oCNT1 OUT NUMBER , oCNT2 OUT NUMBER , nRET OUT NUMBER ) IS ~ というものですが,これをSQL*PLUSでテストとして実行したいのですが,変数定義などどうすれば良いでしょうか? 教えてください。よろしくお願いします。

  • char型変数をLPCTSTR型に変換したい

    大学の研究でプログラム作成している者です. 現在外部ファイルの文字列をfscanf()でchar型変数に取り込み,それをLPCTSTR型変数に変換して,関数に引数として渡そうとしてます. しかし,現在はchar/THCARの変換が正しくできず困っております.現在のコードは以下のような流れになってます. ----------------------------------------------- char name[MAX_PATH]; TCHAR name_t[MAX_PATH]; fscanf( &fp, "%s", name ); wsprintf( name_t, _T("%s"), &name ); // char ⇒ TCHAR makedFunction( name_t ); // 自作関数(引数はLPCTSTR) ----------------------------------------------- しかし, wsprintf()で変換した時点で,文字列がおかしくなってしまい困ってます. 開発環境はVisualStudio2010で,MFC作成(Unicode文字列)となってます.ちなみにマルチバイト文字列を使用する解決方法はなしとします. 解決方法をご存知の方がおられましたら,是非とも,ご回答よろしくお願い致します.

  • 数値を文字型に変換する時の書式設定が思い通りにできず悩んでいます。【訂正】

    Oracleの数値→文字型変換では  SELECT TO_CHAR(売上金,'FMS0000000D00') FROM XXX_TABLE のように文字型に変換する時に先頭に符号(+または-)をつけ、指定 した位置に小数点(ピリオド)をつけ、桁数に満たない部分(左側) には「0」をセットする事が可能です。 上記例で「売上金」の属性がNUMBER(9,2)、値が 123.4だとした場合 処理結果として文字列"+0000123.40"が得られます。 これと同じ変換を「SQLServer2000」で行う事になってしまいました。 SELECT STR(売上金,11,2)などとしてみましたが、  "     +123.40" のように左側が半角スペースになり「0」を   セットする事ができません。  SELECT CONVERT(CHAR(11),売上金,n)でも同様のようです。 SQLServer2000 どのようにすればできるか(あるいは不可能であるか) ご存じの方がお見えでしたら、ご教示いただけないでしょうか?

  • 数値を文字型に変換する時の書式設定が思い通りにできず悩んでいます。

    Oracleの数値→文字型変換で  SELECT TO_CHAR(売上金,'FMS0000000D00') FROM XXX_TABLE のように文字型に変換する時に先頭に符号(+または-)をつけ、指定 した位置に小数点(ピリオド)をつけ、桁数に満たない部分(左側) には「0」をセットする事がどうしても必要になってしまいました。  上記例で「売上金」の属性がNUMBER(9,2)、値が 123.4だとした場合  処理結果として期待する文字列は、+0000123.40 です。 これと同じ変換を「SQL Server2000」で実行したいと思い、 SELECT STR(売上金,11,2)などとしてみましたが、  "     +123.40" のように左側が半角スペースになり「0」を   セットする事ができません。  SELECT CONVERT(CHAR(11),売上金,n)でも同様のようです。 SQLServer2000 どのようにすればできるか(あるいは不可能であるか) ご存じの方がお見えでしたら、ご教示いただけないでしょうか?

  • SCN_TO_TIMESTAMP関数について

    現在Oracle 9.2.0.8を使用しています。 SCN番号から時刻を取得するために、下記コマンドを投入しましたが ORA-00904: "SCN_TO_TIMESTAMP":無効な識別子です。 とエラーがでてしまいます SELECT SCN_TO_TIMESTAMP(946033) from dual; 下記ページでは、Oracle 9i以降であれば、使えるふうに書いてあったのですが・・ http://www.shift-the-oracle.com/inside/system-change-number.html 何かお分かりな方、ご教授よろしくお願い致します。 ※なお、テストで作成した10g環境では、正常に取得できました。