ORACLEでLONG項目からCHAR項目へ桁数指定で文字列を抽出したいのですが、方法はありますか?
LONG項目の先頭から30桁分の文字を抽出し、CHAR項目に入力したいのですが。

会社で使用しているERPパッケージでLONG項目があり、どうしてもこの項目から文字が抽出したいのです。

回答のほど宜しくお願いします。

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

A 回答 (2件)

ちょっと質問の意図がわからないのですが、


例えば、T1,T2の2つのテーブルがあったとして、
T1のnumというnumber(10)の項目があって、その中から
先頭の5桁を取ってきて、T2のcommentというCHAR(5)の
項目に転送するなら、
まず、T1のnumから5文字取ってきて、それを変数hoge[chr(5)]に入れる。

select substrb(to_char(num),1,5) into hoge from t1 where id=1;

それから、hogeをT2のcomment列に挿入する。

insert into t2(id,comment) values (1,hoge);

んで、最後にcommitしたらOKです。

こんなもんでよかったでしょうか?
    • good
    • 0
この回答へのお礼

なるほど!ようやく分かりました!
俺って最悪に頭わるいっすね。

ありがとうございました。

お礼日時:2001/09/10 12:37

変数名をhogeとする。



substrb(to_char(hoge),1,30)

これで先頭から30byteの文字列を取り出しできます。

この回答への補足

もう少し教えて頂きたいのですが、
今、GEMというテーブルがあります。
テーブルの項目定義は下記の様になっています。
<項目定義>
GEM_ID RAW(8) NOT NULL,
GEM_SEQ NUMBER(10) NOT NULL,
GEM_DATA LONG,

SELECT文を普通に書くと、
SELECT SUBSTRB(GEM_DATA,1,30)
FROM GEM
となりますよね。
で、hogeをこれに組み込もうとした場合はどうすれば良いのでしょうか。
本当に初心者ですみません。宜しくお願いします。

補足日時:2001/09/08 13:34
    • good
    • 0

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

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

Qc型肝炎はHしたらうつるのでしょうか?

今c型肝炎がテレビのニュースとかに出てるのですけど血液感染以外にエイズみたいにHしたら相手にうつるのでしょうか?
まったく知識がないので教えていただけませんか?
 

Aベストアンサー

C型肝炎が性行為で感染する確率は低いとされています。
しかし、血液感染するものですから、コンドームの使用をお勧めします。
性交渉の際、目には見えないような細かな傷が多数できるのです。そういった傷からの血液感染という可能性を否定することができませんから。
以上kawakawaでした

Qテーブルの値の先頭2桁を全て削除したいのですが

こんにちは、アクセス初心者です。

テーブル1に入っている、「電話番号」の値の先頭2桁を、すべて削除する方法ってありますか?
「電話番号」には、現在4桁で入力されています。

電話番号  変更後
0012  → 12
9711  → 11
6977  → 77

↑このようなカンジで現在登録されている内容を、一度に
変更したいのですが、なにか方法がありましたら、教えて下さい。
よろしくお願い致します。

Aベストアンサー

更新クエリー(クエリーの種類を「更新」)を作成してください。

フィールド:電話番号
テーブル:テーブル1
レコードの更新:Right([電話番号],2)

これを実行してください。
右から2桁だけを選択できます。

QB型肝炎のキャリアです。うつる??

19歳、遺伝性のB型肝炎のキャリアです。Hするときは相手の方にうつりますか??付き合って2ヶ月の彼氏がいて、きっとバレンタインに初Hすると思います。処女なので、出血するかもなんですが、その血で感染。。。なんてことはないですか?コンドームは絶対に使うつもりですが、心配です・・・。

Aベストアンサー

同じくキャリアです
Hしましたが、
ナニも起こりませんでした
相手の体の都合にもよるのでは?
感染の可能性はありますが、抗体を持つことが出来る
体質であれば何も問題は起きないものです
でも一応相手の了解は取ったほうがいいかと・・・

Qoracle パッケージの仕様?

Oracleのパッケージの仕様で、
パッケージの中で定義されている関数が実行されるたびに、
メモリがたまっていき、開放されないと聞いたのですが、
本当にそうなのでしょうか?

たとえば
CREATE OR REPLACE PACKAGE BODY PackA
IS

FUNCTION FuncA( pv_Para IN VARCHAR2 )
RETURN VARCHAR2
IS
BEGIN
RETURN 'TEST';
END FuncA;

END PackA;

AユーザがPackA.FuncAを実行し、
そのあと、BユーザがPackA.FuncAを実行すると、
それぞれ別にメモリが使用され、Oracleが自動的に開放してくれない。
ということなんですが、本当なんでしょうか???

開発環境は
WindowsNT 4.0
Oracle 8.1.7
です。

よろしくお願いします。

Aベストアンサー

> AユーザがPackA.FuncAを実行し、
> そのあと、BユーザがPackA.FuncAを実行すると、
> それぞれ別にメモリが使用され、Oracleが自動的に開放してくれない。
> ということなんですが、本当なんでしょうか???
についてちょっと考えてみました。
パッケージは、ユーザ毎に定義が可能なので、同じ名前のパッケージ
でもユーザが異なれば、プロシージャの内容が異なる可能性があるので
別の領域を使用すると言う事ではないでしょうか?
メモリの開放についてですが、パッケージ (Stored Procedure) って、
Shared Pool で動くので、「自動的に開放」と言う事にはならないと
思います。
プロシージャを実行する時に、所有者を指定して実行すれば同じ領域を
使用するのではないでしょうか? (多分)

QC型肝炎は尿でもうつるの?

身内にC型肝炎の患者がいるのですが、
便座についていたその患者の尿に気づかず
その上に座ってしまいました。血液で感染することは
知っているのですが、尿でも感染するのかと
気になっています。どうか、教えてください。

Aベストアンサー

気になるのなら調べましょうよ
C型は基本的に血液感染です むかーーーしは輸血とかってのが多かったですけどね こっちに関しては今は無いです
今あるのは麻薬とかの針の使いまわしですかね。
性行為感染とか母子感染とかもなくは無いですがほぼないと思ってください。

つまりその尿が血尿とかで今すぐでた物であり あなたの体内に入り直接粘膜に触れなければ感染しません。
便座についていた程度であれば感染確率は0です

QACCESS クエリの抽出項目をEXCELから

Access2000のクエリの抽出項目をExcel2013の内容を抽出項目として指定するにはどうすればよいでしょうか。

Excelには、
佐藤
田中
鈴木
.........
のように縦に名前が最大18名分入っています。

この(最大)18名の名前をAccessの抽出項目とします(フィールドは10あってその6番目に抽出項目を18名分入力したいのです)。
18名を一人一人コピペしていたのですが、何とか簡素化できないものかな?と思っています。

できれば、マクロで一発で抽出項目を貼り付けたいのですが。
よろしくお願いします。

Aベストアンサー

#7です

修正量がそう多くなかったので回答してみます。

修正点
・ハイパーリンクしない
・出来上がるシート名は「1R」「2R」・・・「xR」
・抽出内容が無くてもシートは初期化する
・騎手名は C1 から始まり、終了は空白が2行続いたら
 (24 に限定せず、書かれていた分を処理する)


Public Sub Samp2()
  Dim cn As Object, rs As Object
  Dim sSql As String, sS As String
  Dim v As Variant
  Dim iRow As Long, iRowN As Long, iR As Long
  Dim i As Integer
  Const adStateOpen = 1
  Const PN2007 As String = "Microsoft.ACE.OLEDB.12.0"
  Const PN2003 As String = "Microsoft.Jet.OLEDB.4.0"
  Const CMDB As String = "\2014.mdb"
  Const CSQL = "SELECT * FROM 2014 WHERE 騎手名 IN ('{%1}');"

  On Error Resume Next
  Set cn = CreateObject("ADODB.Connection")
  For Each v In Array(PN2007, PN2003)
    cn.Open "Provider=" & v _
      & ";Data Source=" & ThisWorkbook.Path & CMDB
    If (cn.State = adStateOpen) Then Exit For
  Next
  If (IsEmpty(v)) Then
    MsgBox "環境不足で処理中断", vbCritical
    Set cn = Nothing
    Exit Sub
  End If
  On Error GoTo 0

  Application.ScreenUpdating = False
  With Worksheets("SheetDB")
    iR = 1
    iRow = 1
    While (.Cells(iRow, "C") <> "")
      iRowN = iRow
      With .Cells(iRow, "C")
        If (.Offset(1) <> "") Then iRowN = .End(xlDown).Row
        v = WorksheetFunction.Transpose(.Resize(iRowN - iRow + 1))
      End With
      If (IsArray(v)) Then
        sSql = Replace(CSQL, "{%1}", Join(v, "','"))
      Else
        sSql = Replace(CSQL, "{%1}", v)
      End If

      sS = iR & "R"
      For Each v In Worksheets
        If (v.Name = sS) Then Exit For
      Next
      If (IsEmpty(v)) Then
        With Worksheets.Add(After:=Worksheets(Worksheets.Count))
          .Name = sS
        End With
      Else
        v.Activate
        Cells.ClearContents
      End If

      Set rs = cn.Execute(sSql)
      If (Not rs.EOF) Then
        With Range("A1")
          For i = 0 To rs.Fields.Count - 1
            .Offset(, i) = rs(i).Name
          Next
          .Offset(1).CopyFromRecordset rs
        End With
      End If
      rs.Close
      Set rs = Nothing
      iRow = iRowN + 2
      iR = iR + 1
    Wend
    .Activate
  End With
  cn.Close
  Set cn = Nothing
  Application.ScreenUpdating = True
End Sub

#7です

修正量がそう多くなかったので回答してみます。

修正点
・ハイパーリンクしない
・出来上がるシート名は「1R」「2R」・・・「xR」
・抽出内容が無くてもシートは初期化する
・騎手名は C1 から始まり、終了は空白が2行続いたら
 (24 に限定せず、書かれていた分を処理する)


Public Sub Samp2()
  Dim cn As Object, rs As Object
  Dim sSql As String, sS As String
  Dim v As Variant
  Dim iRow As Long, iRowN As Long, iR As Long
  Dim i As Integer
  Const adStateOpen = 1...続きを読む

QB,C型肝炎が歯科治療でうつる可能性は?

 上記の通りです。
ポイントは、歯医者での口腔処置の場合、一人一人使い捨てでない機器があると思うのですが、処置時に出血もありますのでB,C型肝炎の感染の可能性があるのではないかと思うのですがいかがでしょう?

Aベストアンサー

使い捨てでない機材であっても、リンク先のような消毒を行えば
ウイルスは除去されるようです。

しかしながら、消毒をされていない機器であれば、感染の可能性はあるということになります。
消毒していない機器を使っているような歯科があったとしたら、
ウイルスを撒き散らしているようなものです。

歯科の機器や理髪店のかみそりなど消毒が十分であると祈っています。

参考URL:http://www.mhlw.go.jp/bunya/kenkou/kekkaku-kansenshou09/02-10.html

Qある項目が最小の行だけを抽出する方法

以下のデータから、t_stampが一番古いidだけを取得
したいのですが、order by t_stampを使わずに8を抽出する方法はありますか?

id t_stamp host
5 20010501 yahoo.co.jp
8 20010427 google.co.jp
7 20021111 goo.ne.jp

Aベストアンサー

select id from xx where t_stamp in (select Min(t_stamp) from xx);

ではいかがですか?

Qキスでうつるものは

ある風俗嬢のブログにこう書かれていました。
¨キス感染¨
A型肝炎、B型肝炎、C型肝炎。
咽頭クラミジア、咽頭淋病。
HIVウィルス感染=エイズ。

キスでうつります。
キスで簡単にうつる。

あ、、歯周病も歯肉炎もね!!

みんなにありえる可能性。
SEXよりも身近な可能性。
キス感染。


とありましたが、この中で本当にキスで感染する可能性のあるもの

そしてそれに感染した場合に完全に直る病気なのか
完治は難しいのかを教えてください。

Aベストアンサー

咽頭クラミジア、咽頭淋病、口腔ヘルペスは移ります
歯周病は歯周病菌を持っていない人(赤ちゃんなどです。風俗に行く方で歯周病菌を持っていない、という方がいるとは思えませんが…)なら移ります

ヘルペスなど痒痛いブツブツができてかなり辛いです
確かに防ぎようがないという点でHIVより身近でキケンといえますね

QACCESSでクエリ作成時複数のフィールドを同じマスタ項目から抽出する方法

ACCESSでクエリを作成しています。テーブルは”売上明細”と”社員マスタ”があります。売上明細には”担当者CD”と”加工者CD”というフィールドがあって、それぞれのフィールドが、同じ社員マスタの”社員CD”をキーに”社員名”を抽出したいのですが、「あいまいな外部結合が含まれているので、SQLステートメントを実行できません。第一次結合を実行する分割クエリを作成し、SQLステートメントにそのクエリを含めてください」とメッセージが出ます。どこにどのように設定すればいいのでしょうか?優先順位は特にありませんが、最初に設定されている担当者CDを第一次結合とする場合どうすればいいのでしょうか?この第一次・第二次はどのような意味があるのでしょうか?まだVBAは手付かずで、初心者です!これから学習しようとしているところです。よろしくお願いいたします。

Aベストアンサー

ひとつのテーブルの異なるフィールドが同じテーブルを参照しているわけですね
こういう場合はひとつのテーブルを2つのフィールドに結合するのではなく
同じテーブルを別の名前で結合します

クエリデザインビューでの操作だと、社員マスタを2回クエリデザインビューに取り込み
(2つ目は異なる名前で取り込まれます)
担当者と、加工者に別々に結合します


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報