てぃぐれのプログラマwiki

ワクワクに従う

ファンクションメモ【ORACLE】

LEADING

先頭の指定した文字列を削除する

TRIMとセットで書く。

SELECT TRIM(LEADING 'x' FROM 'xxxy') FROM DUAL;

結果:y

 

TRAILING

先頭の指定した文字列を削除する

TRIMとセットで書く。

SELECT TRIM(TRAILING 'x' FROM 'xxyx') FROM DUAL;

結果:xxy

※下記はエラー

SELECT TRIM(TRAILING 'xx' FROM 'xxyx') FROM DUAL;

ORA-30001: trim set should have only one character

date型の扱い方雑にまとめ【ORACLE】

MONTHS_BETWEEN 何ヶ月の差があるかの計算

select MONTHS_BETWEEN('11-DEC-20','11-OCT-20') from dual;

結果: 2

12月- 10月 = 2

 ちなみに

 select MONTHS_BETWEEN('11-DEC-20','10-OCT-20') from dual;

2ヶ月と1日の場合

結果:

2.03225806451612903225806451612903225806

になった。1ヶ月を1にしたときの1日分が計算されているのだろう。

 

DATE型の算術演算

日時 + 数値 = 日時型

日時 -  数値 = 日時型

日時 - 日時 = 数値型 日数が戻される

※下記の演算はできない

日時 + 日時

日時 * 数値

 

DATA型の表記方法変えるにはto_char

SELECT

 TO_CHAR(NEXT_DAY(LAST_DAY(hire_date),6),'YYYYMMDD')

 from employees;

 

※変換にto_dateは使わない

 

 

 

置換変数【ORACLE】

経緯

Oracle Master Silverの勉強をしていると普段使わない、置換変数というものが出てきた。

でも使い方をイメージしていると、これ、めっちゃ便利なときあるやん。いつも、自分ができないと思っていたことがこれでできるやんと思うようになったので、wikiとして残していきたい。

 

&変数名

同じセッション内のdmlであるならば、そのdmlの回数分、指定してあげる必要がある。

 

&&変数名

&&変数名の場合、同じセッション内のdmlであるならば、一回の指定で使い回される。

 

使い所

この置換変数の良いところはテーブル名の指定にも使える。テーブル定義の変更をしたいときにその箇所だけ入れ替えて使うことができる。

全てのテーブル定義を変更したいときに、新規で作り直すのも厳しいなあと思うときに、これ使えるやん!!

って思った。やっぱ知らないのは罪深いよね。

 

 

曖昧検索 アンダースコア _の使い方【ORACLE】

経緯

曖昧検索といえば%を使うが_をあまり業務で使うことなく、頭になかったので、ここに記しておきたい。

 

_の使い方

like '_x%' 1文字目にxがある2文字目以降は何でも良い

like '_ _ _ _%r_ _'; 前に4文字以上がある。後ろから3文字目がr

like '_ _ %r%_ _' rの前にも後ろにも2文字以上ある

 

※見やすさの都合上アンダースコアの間にスペース入れています。

 

代替引用メカニズム【ORACLE】

経緯

絶対、この先使わないであろう、ORACLEでのシングルクォテーションの役割を果たす機能、書き方を見つけた。

 

q'[xxx]'

代替引用メカニズムではリテラルを扱うときに、シングルクォテーションで描くのではなく、q' + 任意の文字 で始め、任意の文字 + ' で終わるとその囲われた文字はリテラルになるというものだ。

このタイトルはxxxとして扱われる。

下記の場合何が出るのであろう。

q'xxxx'

xxxx?

xx?

?

調査が必要だ。

 

シングルクォテーションとダブルクォテーションの違い

ダブルクォテーションは列名を名付けるときに使う。その際、シングルクォテーションを使うことはできない。

またダブルクォテーションを使うことにより、予約語を出すこともできるし、小文字と大文字を分けることもできる。

 

コードを読む1 STACK AOJ

経緯

自分のコード力?想像の向上のためソースを読みたい。ついでにアルゴリズムやデータ構造を学びたいのでAOJのソースを見る。

 

 

下記コードの見所

自分がやった場合、一回の処理で2回popすることを考えていなかった。

forloopで一回ずつしか処理を回すことができていなかった。めっちゃ頭硬いよなと感じる。

https://onlinejudge.u-aizu.ac.jp/solutions/problem/ALDS1_3_A/review/2467428/c64qh33/C%23

 

Queueじゃダメなん

と思ってみる。最後の演算が*か+なら良いが-だと値が違ってくる。

と思ったが過程を変えることでQueueでもいけるな。。

 

Stack

Last in First out っていうやつやな。

人数の多いエレベーター感あるよね。