| |||||||||||||||||||||||||||||||||||||||||||||||
code:Haemophilus influenzae |
ここに書かれていることは無保証です。同じことを行って問題が発生しても、龍義は責任をとりません。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
あけましておめでとうございます。 毎年のように書いているけど、ここの4か月遅れを2か月ぐらいにしたいところ。 本当はリアルタイムにしたいのだけど、写真をまとめて用意したりするので、理想は低くで。 ことしもよろしくお願いします。
個人的にはレタスを切るのに気にせず包丁を入れるが、世間的にそれを避ける人がいるようで。 web で検索してみると、ありえないぐらいの勢いで書いている人もいて。 切り口が酸化して色が悪くなるとか、味が錆び臭くなるとか、そんな感じで。 そもそも、家庭用の包丁はステンレス製が多いため、酸化とは無縁だと思うのだけど。 と言うことで、本当にそうなのかやってみることに。 本来なら鋼の包丁を用意すべきなのだけど、家に無かったため、用意したのは鉄代表の剪定鋏、セラミックの包丁、ステンレスの包丁の3つ。 これに手でちぎったときの場合を加えて、4バリエーションでテストしてみる。 切って3時間放置してみた。 全体的に変化がないように見える。 写真はステンレスの包丁で切ったもの。 気温が低かったのが問題なのか、もう少し長い時間が必要なのか。 まな板が使えないと夕食の用意ができないため、仕方なく3時間経過したものを全て食べてみた。 食べた感じは違いがあるとは思えないものだった。 私の味感覚には疑問があるが、見た目も変わらなかったので、テストは成功したのか失敗したのか判断が付かないものになった。 今度、気温が暖かくなったら、再挑戦してみようかな。
数日前、電気メーターの交換があるとかと紙が入っていた。 すっかり忘れていたけど、今日だったようで業者の方がやってきた。 話を聞くと、電気は止まらないとのこと。 着替えてなかったので、外に出られず写真も撮れなかったが、一時的に電気をバイパスするアタッチメントのようなものを取り付け、メーターを交換したとのこと。 そのアタッチメントが付いている時間は、メーターが回らないので、電気料金は無料なのだとか。 と言っても、せいぜい数分のことだけど。 「それ、ずっと付けといて下さい」と言ってみたけど、苦笑いされるだけで。 午後になって取り付けたメーターを見てみると、これまで電気を使っていると円盤が回ってわかるもので、アナログのメーターだったものが、デジタルのものに替わっていた。 雷とか落ちても、データが消えないものなのかな。 「検針」という言葉も相応しくないものになった感じ。 そのうち、自動的に検針されて情報を送られるものになりそうなので、また替わるでしょう。
夏から作っている下駄箱、なかなか作業する時間がなく、まだ完成していないので作業を進めることに。 まず、下の左側扉の取り付け。 玄関枠があるため浮かせて高さを稼く必要があるので、下駄板の作成。 6mm 厚の MDF 板があったため、それで切り出した。 しかし、MDF は水分を含むと弱くなるため、少し悩んででホームセンターで 6mm 厚の桐の板を買ってきた。 適当な大きさに切り出して壁板に貼り、ヒンジの取り付け。 これで左側の扉の取り付けはできた。 このままだと、扉の隙間に爪を入れて開けることになるので、買ってあった取手も取り付けた。 下側の扉は完成。 左側の玄関枠との間が 2mm ぐらい開いているところがあって、もう少し調整したかったが限界だった。 扉の裏側にフックとか取り付ける予定。 今日は半日しか時間が取れなかったが、買い物と扉の取り付けと位置調整で終わってしまった。
昨日の続き。 下側の扉が棚板を受け止める部分と干渉して全開できないため、削ることに。 左側は取り付けたまま鋸を入れた。 これで全開できるようになった。 削るのだったら、扉側の角を落とす必要もなかったな。 右側も当たってしまっているので、削ることに。 ここも扉側を削る必要なかったな。 取り付けたままだと鋸が入らなかったので、一度取り外して角を落とした。 これで扉が全開できるように。 上の左側の扉の取り付け準備。 まず、このまま取り付けると玄関枠の高さ分空いてしまうのため、同じ高さの木材を取り付け。 鉋で削って高さを揃え、色合わせのために防腐塗料を塗った。 ここまでは良かったが、壁側が想像以上に垂直になってなく、扉を合わせてみたら 10mm 以上隙間が開いてしまう。 天井に合わせると、かなり壁が斜めなのがわかる。 扉の木材を買い直すと今の木材が無駄になってしまうし、ここは斜めに切った棒を用意して壁の斜めの部分を修正することに。 また鉋の出番になりそうである。 壁や床がきちんと水平垂直になっていれば、こんな苦労しないのだけどな。
昨日というか連日の続きで。 毎日半日しか作業していないし、色々と問題が出てくるのでなかなか進まない。 下側の扉が付いたので、今日は扉の裏側の作業。 まず下駄箱側の裏に傘掛けのためのバーを取り付ける。 これは、以前使っていたものの再利用で、パイプの長さをカットして幅を合わせた。 右側扉の裏にはドライバーを差し込めるものを作りたい。 鉄のアングルがあったので、利用できないかとドライバーを入れてみるも、きちんと落ち着かないので却下となった。 試しに1×4材の端材で穴あけをして、ドライバーが落ち着くか試してみた。 まさかのバックピントだな。 大丈夫そうなので、家に残っていた1×4材で作ることに。 切り出したり、穴あけをして扉の裏に取り付け。 これですぐに取り出せるようになった。
奥側にはペンチなどを収めたが、先の細いラジオペンチはグリップが太すぎて収まらず。
別の場所になりそう。
あとは、10-12 のメガネレンチと、六角棒のセットなんかをぶら下げたいが、扉なのでバタバタしてしまうし、すぐに取り出せて良い固定方法がないか考え中。 鉋で仕上げたりして、暗くなってきた。 色塗りはまた来週以降になりそうである。 ヒンジの下駄も用意しないといけないし、完成はまだ先になりそうである。
Google MAP で航空写真を見ていた。 Google MAP では 3D のための高さデータを合成するためか、変なノイズというか変形されてしまう。 これを純粋な上空からの航空写真にして見たかったのだけど、調べた限りそんなオプションはないみたい。 Google Earth も試してみたけど、同じ。 じゃ、ということで Yahoo の地図で見てみた。 変形されていない航空写真だけど、都内などの中心部以外は解像度が低く、使い物にならない。 でも、色々地図が用意されているのは面白いかな。
アウトドア用の簡易ベンチがあって、シート面が破れたのでロープで誤魔化して使っていた。
見た目も座り心地も悪いので、帆布を張ろうかと考えた。
Rakuten で帆布を検索すると、〇号といった表記で売られていて、これが布の厚さなのはわかるが、どのぐらいのものが必要なのか見当がつかない。
こんなときは実際の店で見てみたいところ。
8号の生地を買ったとして、送料を入れると1000円を超えてしまうので、そこまで気軽に買うこともできないし。
Windows 10 の PC が動かないと報告があって。 今日は Windows Update の日なので、そのせいで遅くなっているのだろうと思って見に行ったら、完全に固まっていた。 マウスカーソルさえ動かないぐらい。 その PC で、こんなことは初めてかな。 仕方なく電源ボタン長押しで起動し直したら、Windows Update の適用が始まって。 固まった原因も Windows Update に起因しているのじゃないかと、疑ってしまった。 結局、その PC が使えるようになるまでに30分以上かかることとなった。 第二火曜の翌日は、無駄な時間を取られるかもしれないと心した方が良いな。
年始に通販で買い物をした。 もう少しで送料無料になる感じで、どうしたものかと思っていたら、目覚まし時計が壊れたことを思い出して、目覚まし時計を買った。 それが今日届いたので、開けてみることに。 買ったのは、セイコーの NR536 というか色が白なので NR536W という製品で、電波時計のもの。 安定が良くて、そんなに大きくなければ良いかなという感じの前提だったので、ほとんど値段で選んだ感じとなった。 箱を開けると電池が付いてきた。 やっぱり、マンガン電池が使われるみたい。 メーカーとしても液漏れが気になるところなのでしょう。 本体の液晶は角度によっては少し見辛いかな。 電池を入れて20分ぐらい経つも、時間が合う気配がなく。 リセットボタンを押してみたけど、やっぱり変わらない。 明日まで放置することに。
いつものように web 通販で色々と買おうと思ったのだけど。 Amazon だと売っているのは売っているけど、Amazon 扱いじゃないところだったりして、いくつか買うと送料が嵩んでしまう。 じゃ、ということで Rakuten で見てみると、やっぱり欲しいものがいくつか違う店で見つかるので、送料を考えてしまう。 Amazon の良いところは、Amazon が扱うためまとめて購入できて送料が節約できるところだったのに。 書籍に関しては文句ないところなのだけど。 結局、Monotaro で購入することにした。 色々な web ストアを見て、値段とか送料とか考えたりしているので、便利なようで意外と時間がかかって面倒だったりする。 かと言って寡占されるのも困るし、難しいところ。
一昨日の目覚まし時計、昨日ようやく時刻が合ったようなので、目覚まし機能を使ってみた。 これまで使っていた目覚まし時計は、アラームオフ、アラームオン、アラームオン+スヌーズ、の選択ができたが、買った NR536 はオンとオフだけなので、スヌーズはないのかもしれないと思っていた。 今日の朝、鳴った目覚まし時計を止めて、しばらくしたら5分後にスヌーズが鳴り出した。 スヌーズ機能はあって、必ず鳴るみたい。 つまり、スヌーズを止めるにはアラームをオフにする必要がある。 そのため、寝る前に毎晩アラームオンにしないといけない。 スヌーズの選択ができれば、毎晩セットする操作が不要になるので、楽なのだけど。 Android スマートフォンなどでは曜日の設定ができるし、アラームを止めるときもスヌーズさせるか選べるので、便利と言えば便利。 ただ、スマートフォンを台所やカバンの中に置き忘れていたり、電池が切れていたりするので、私の使い方では万能ではない。 なので、やっぱり目覚まし時計を使いたい。 温度計なんて無くて良いから、毎晩セットする必要がないようにして欲しかったな。
このページのログを見ていると、リファラーがちょくちょく AMP ページからだったりして。
個人的にはスマートフォンでほとんどアクセスしないため、あまり意識したことがないのだけど、これから増えるとなると少し考えないといけないと。
ここは面倒なので、AMP ページなんて作ることはしないだろうけど、別で書いている WordPress のページに入れてみようかどうか、というところ。
プラグインを入れると自動で出力してくれるため、面倒なところも少ないし。
ただ、一部 JavaScript を使っているので、そうすると AMP 化できないから、そこをどうしようか考えないといけない。
外国人の人からメールが来ていて、その中で日本に来たときインターネットに繋げたいのだけど、Kyushu Wifi はどうか?と聞かれた。 いやいや、九州だけしか使えないんじゃないの、と思って調べたられっきとした日本全国でのサービスで、各携帯電話キャリアのモバイル wifi ルーター機器のレンタルをしているみたい。 レンタルしているのが大きいのだろうけど、日本にいるよりも海外の人の方がサービスに詳しいのだろうなという気がして。 そんな感じで、今日は良い勉強になった。 個人的には端末が対応していれば安い SIM カードを使った良いのじゃないかなと返事しておいた。
昨日の続きで。
もう少し日本で使える Wifi を調べていたら
PostgreSQL でデータが取れてないとあって。 どうやら古いデータが取れていない。 SQL を見た感じ、大丈夫そうなのだけど、原因がわからずちょっと詰まった。 結局、text が null のときに not like が評価されないという見落としというか、ミスと言うか。 試しにやってみた。 testdb=# CREATE TABLE textdemo( demodb(# name character(6), demodb(# price integer, demodb(# remarks text demodb(# ); CREATE TABLE demodb=# INSERT INTO textdemo VALUES ('orange', 200, null); INSERT 0 1 demodb=# INSERT INTO textdemo VALUES ('apple', 300, null); INSERT 0 1 demodb=# INSERT INTO textdemo VALUES ('banana', 100, ''); INSERT 0 1 demodb=# INSERT INTO textdemo VALUES ('kiwi', 90, 'sale'); INSERT 0 1 demodb=# INSERT INTO textdemo VALUES ('melon', 500, 'half price sale'); INSERT 0 1 demodb=# INSERT INTO textdemo VALUES ('berry', 500, 'spring sale1'); INSERT 0 1 このときに、LIKE でも NOT LIKE でも良いのだけど。 demodb=# SELECT * FROM textdemo WHERE remarks NOT LIKE '%sale%'; name | price | remarks --------+-------+--------- banana | 100 | (1 row) となって、null の値での LIKE が評価されていない。 実際のデータでは、remarks の部分は後から追加したので、昔のデータは null 扱いになって取れなかった。 追加後は空白を入れていたのだけど、SELECT で見ると。 demodb=# SELECT * FROM textdemo; name | price | remarks --------+-------+----------------- orange | 200 | apple | 300 | banana | 100 | kiwi | 90 | sale melon | 500 | half price sale berry | 500 | spring sale1 (6 rows) となって、結果を見る限り違いが出ないため、気が付くのに30分近くもかかってしまう。 無駄な時間を使ってしまった感じ。
少し昨日の続きで。 PostgreSQL の UPDATE で || を使って連結している部分がある。 ひょっとして、null が入っていた場合は、連結できないのじゃないかと思ってやってみた。 昨日の textdemo の db のままで。 demodb=# UPDATE textdemo SET remarks = remarks || ' demo'; UPDATE 6 demodb=# SELECT * FROM textdemo; name | price | remarks --------+-------+---------------------- orange | 200 | apple | 300 | banana | 100 | demo kiwi | 90 | sale demo melon | 500 | half price sale demo berry | 500 | spring sale1 demo (6 rows) やっぱり駄目みたい。 今度から連結するときは覚えておかないと。
家の Windows 10 の PC が再起動しようとしていた。 今日は Windows Update と関係ない日だと思っていたのに、何だろうと調べてみたら Windows 10 October 2018 Update が再配信されているらしく。 Windows 10 October 2018 Update は出てきた当初色々と問題があって酷かったみたいだけど、問題は全部直ったのだろうか。 折を見て再起動してみるつもりだが、起動しなくなったり、大事なデータが消えたら心配なのでバックアップしておくことに。
昨日の続きで。 Windows Update 後の起動で、えらく時間がかかって。 30分ぐらい待たされてようやく使えるようになった。 起動して、まず音が出ない。 出力のデバイスが変更されていたので、戻して。 それ以外には特に大きく変わった感じもなく。 悪い言い方をすると、単純に時間を取られたデメリットしかなく。 もうちょっと無駄な時間をなんとかして欲しいところ。
html でファイルをアップロードしているページがあって。
input タグの type 属性に file を指定していて、ボタンを押すとファイル選択画面になるような、ありがちの感じだった。
で、「ドラッグアンドドロップでできないか?」と要望があった。
面倒臭そうなので、「できなくはないです」と尻すぼみの声で言ったのだけど、「じゃ、お願い」となった。 ドロップできます
どうもブラウザでファイルを開きにいっている。 デバッグさせて止めてみると、うまくいっていると言えばうまくいっている感じで。 ブラウザの動作を止めないといけないので、ondragover で呼び出している関数に event.stopPropagation(); event.preventDefault(); を入れてあげないと駄目みたい。 やってみた。 ドロップできます
これで動きはなんとなくできて、あとはファイルを受け取らないといけない。 event.dataTransfer.files でドロップされたファイルを取得して、表示してみる。 ドロップできます
ファイルの送信は HTML5 の FileReader オブジェクトが使うと楽そうである。 他にやることがあったので、続きは明日。
昨日の続き。 まずは、Javascript 的にファイルを取得する。 var reader = new FileReader(); function dover(event){ event.stopPropagation(); event.preventDefault(); } function dropped(event){ var files = event.dataTransfer.files; document.getElementById('dropzone').innerText = files[0].name reader.readAsDataURL(files[0]); } function fileview(){ document.getElementById('dropimage').src = reader.result; document.getElementById('dropimage').style.width = "400px"; } reader.addEventListener('load', fileview, false); ドロップできます
こんなものでできてしまうのか。
あとは POST で投げないといけない。 var reader = new FileReader(); function dover(event){ event.stopPropagation(); event.preventDefault(); } function dropped(event){ var files = event.dataTransfer.files; document.getElementById('dropzone').innerText = files[0].name reader.readAsArrayBuffer(files[0]); } function fileupload(){ var blob = new Blob([reader.result], {type: 'image/jpeg'}); var xhr = new XMLHttpRequest(); xhr.open('POST', 'upload.php', true); xhr.send(blob); } reader.addEventListener('load', fileupload, false); アップロードは jpeg 画像固定なので、実際は files[0].type で事前にチェックしてある。
非同期で upload.php の応答を省略しているけど、テストなので一旦これで。 <?php $upfile = file_get_contents('php://input'); file_put_contents('uploaded.jpg', $upfile); ?> まさかの2行だけで保存できてしまう。 別に1行で収めても良いけど。 これでなんとかなりそうだけど、色々と制御を入れるのが大変そうだな。
海外に旅行に行くと、携帯電話も PHS も使えないので持ち歩かないか、カバンの奥に入れることが多い。 そうすると困るのが時間の確認で、腕時計をしたくないというか、できないために、小さな時計を持っている。 その時計をいざ使おうと出してくると電池が切れていることが多く。 電池を替えようと、しばらく前から100円ショップで SR626SW を探していたのだけど、なかなか見つからなくて。 仕方なく SR626 を買ってきた。 元々入っていた電池は SONY 377A のため、互換的には LR626 なのだけど、電池のもちが良さそうなので酸化銀の電池にした。 電圧がちょっと違うので、どうなるかわからないがこれで様子を見てみる。
去年の12月29日の続き。 作り置きしておいたアルミニウムの容器に入れたグラタンを冷凍しておいた。 これをどうやって温めようか。 冷凍しているので、いきなりオーブンで温めても中が凍っている可能性が高いし、アルミニウムの容器なので電子レンジも使えない。 急いでいなかったため、余熱なしの100度のオーブンで30分温めてから、250度で10分温めることに。 結果はこんな感じで、外は良い感じだけど、中はちょっと冷たい部分があった。 アルミニウムの容器なので、電子レンジで温められないのが辛いところ。 時間が無いときは、冷凍グラタンの温めは無理かもな。
プリンターのネットワークの設定をして欲しいと来て。
プリンターを見に行ったら、MultiImpact 700JEN というまさかのドットプリンターで。
いまどき、ドットプリンターなんて使うんだと聞いてみたら、複写式定型用紙を印刷するのだとか。
普通紙にその枚数だけ印刷すれば良いだけの気がするけど、それじゃ駄目なんでしょう。 そこまでしないといかないのかと思いながら、仕方なく登録して。 これで目的のプリンターを見つけて、ようやく IP アドレスを振ることができた。 と言っても、一度電源を入れ直す必要があったけど。 設定のやり方も、全体の仕組みも2世代以上前の感じ。 せめて、初期設定で DHCP を有効にしてくれたら、面倒なソフトウェアが不要になるのに。
佐川急便から荷物が届いた。
そこまではよくあることだけど、今回はサインを専用端末ですることになって。
渡されてサインをしたものの、指でサインしたためになんだか納得いかないサインになった。
NEC のプリンターが某所に入ってきた。
プリンタードライバーをダウンロードしようとしたが、jpn.nec.com の web サイトに繋がらない。
これは向こうが悪いのかこっちが悪いのか。
一度、別な環境の PC にリモートデスクトップで接続して、該当のドライバーをダウンロードして、コピーして対処した。 client hello の後、真っ黒になっている。 Previous segment not captured の後は、DUP ACK に Retransmission で。 10分ぐらい調べてみたけど、原因わからずで。 IE が原因の可能性もあるので、今度別のブラウザーをインストールしてやってみる予定。
PHP でミリ秒単位の時間が欲しくて。 date() 関数のフォーマットでできると思って u を入れてみたら、必ず 000 になってしまって。 u が用意されているものの、実質 date() 関数で取得できるのは秒単位までで驚いた。 じゃ、どうするかと調べてみると、microtime() 関数で UNIX 時間をマイクロ秒単位で取得して、それを利用するとかで。 関数2つ並べると、タイミングで秒が変わってしまう可能性があるので、date の引数に microtime の結果を入れる必要があるし。 なんだかユーザフレンドリーじゃない感じだなと。
C# でプログラムを書いていて。 ini ファイルから読み取った文字を、ファイル出力している部分があった。 出力していたファイルの中に「\r\n」と入ってるけど、これは何でしょうか?と質問が来た。 あ、と思って ini ファイルの中身の確認。 [texttitle] header=報告書\r\n本日の報告をします\r\n\r\n こんな感じで入っていた。 本当はもっと長いけど。 これを、C# で受け取るときは、こんな感じだった。 textBody = ini.GetValue("texttitle", "header", "報告書\r\n報告をします\r\n\r\n"); ini ファイルに header が無かった場合は、ちゃんと改行が入っていたので気にしていなかった。 ということで、デバッガで textBody の確認をしたら、 報告書\\r\\n本日の報告をします\\r\\n\\r\\n となっていた。 こりゃ駄目だと思って、こんな感じで変換してみた。 textBody = textBody.Replace("\\\\", "\\"); しかし、うまく変換されず。 ini ファイルが Shift JIS だからかとか色々考えてみたが、一旦 Byte に変換してようやくデバッガの表示に惑わされていることに気が付いた。 "\r" と表示されていても、中身は制御文字なのだと。 ということで、変換はこうなった。 textBody = textBody.Replace("\\r", "\r"); textBody = textBody.Replace("\\n", "\n"); 寝不足でコーディングしたら駄目だな。
VGA 出力しかない PC があって。
モニターは HDMI 入力しかないものが余っていた。
VGA → HDMI の変換が数百円程度の出費でできれば、やってみようかと思って調べてみる。
PostgreSQL で。 階数順に並べたいところがあった。 簡単にするために、テーブルを作って、こんな感じ。 testdb=# \d shop_order; Table "public.shop_order" Column | Type | Modifiers --------+------+----------- shop | text | floor | text | testdb=# SELECT * FROM shop_order; shop | floor ----------------+------- ダイソー | 2 無印良品 | 5 ユニクロ | 3 スターバックス | 1 Loft | B1 JTB | B2 KALDI | 2 (7 rows) B の文字が入るため、文字列でとっている。 単純に並び替えをすると。 testdb=# SELECT * FROM shop_order ORDER BY floor; shop | floor ----------------+------- スターバックス | 1 ダイソー | 2 KALDI | 2 ユニクロ | 3 無印良品 | 5 Loft | B1 JTB | B2 (7 rows) こうなってしまうため、B が出たときは -1 を掛けて並び替えをしていた。 本当は ORDER BY の中に入れてるけど、こんな感じ。 testdb=# SELECT shop, floor, testdb=# ((CASE WHEN substr(floor, 1, 1)='B' THEN -1 ELSE 1 END) * to_number(substring(floor FROM '[0-9].*$'),'999')) AS rfloor testdb=# FROM shop_order ORDER BY rfloor; shop | floor | rfloor ----------------+-------+-------- JTB | B2 | -2 Loft | B1 | -1 スターバックス | 1 | 1 ダイソー | 2 | 2 KALDI | 2 | 2 ユニクロ | 3 | 3 無印良品 | 5 | 5 (7 rows) これで動いて暫く大丈夫だったのだけど、誰かが手動で R と G を入れてしまったようで。 testdb=# SELECT shop, floor, testdb=# ((CASE WHEN substr(floor, 1, 1)='B' THEN -1 ELSE 1 END) * to_number(substring(floor FROM '[0-9].*$'),'999')) AS rfloor testdb=# FROM shop_order ORDER BY rfloor; shop | floor | rfloor ----------------+-------+-------- JTB | B2 | -2 Loft | B1 | -1 スターバックス | 1 | 1 ダイソー | 2 | 2 KALDI | 2 | 2 ユニクロ | 3 | 3 無印良品 | 5 | 5 丸亀製麺 | G | 築地銀だこ | R | (9 rows) R はなんとか免れているが、G の位置がおかしい。 R と G の対応をしておく。 testdb=# SELECT shop, floor, testdb-# ((CASE WHEN substr(floor, 1, 1)='B' THEN -1 ELSE 1 END) * (CASE WHEN floor='R' THEN 999 WHEN floor='G' THEN 0 ELSE to_number(substring(floor FROM '[0-9].*$'),'999') END)) AS rfloor testdb-# FROM shop_order ORDER BY rfloor; shop | floor | rfloor ----------------+-------+-------- JTB | B2 | -2 Loft | B1 | -1 丸亀製麺 | G | 0 スターバックス | 1 | 1 KALDI | 2 | 2 ダイソー | 2 | 2 ユニクロ | 3 | 3 無印良品 | 5 | 5 築地銀だこ | R | 999 (9 rows) あまり美しい感じがしないけど、頭が回らないので、今日はこのぐらいにしておく。
昨日の続きで。 そのうち M2 とか出てきそうな気がした。 昨日のままだとどうなるか、やってみた。 testdb=# SELECT shop, floor, testdb-# ((CASE WHEN substr(floor, 1, 1)='B' THEN -1 ELSE 1 END) * (CASE WHEN floor='R' THEN 999 WHEN floor='G' THEN 0 ELSE to_number(substring(floor FROM '[0-9].*$'),'999') END)) AS rfloor testdb-# FROM shop_order ORDER BY rfloor; shop | floor | rfloor ------------------+-------+-------- JTB | B2 | -2 Loft | B1 | -1 丸亀製麺 | G | 0 スターバックス | 1 | 1 ダイソー | 2 | 2 KALDI | 2 | 2 チャンスセンター | M2 | 2 ユニクロ | 3 | 3 スタジオアリス | M3 | 3 無印良品 | 5 | 5 築地銀だこ | R | 999 (11 rows) M だと 0.5 引けば良いのかな。testdb=# SELECT shop, floor, testdb-# (((CASE WHEN substr(floor, 1, 1)='B' THEN -1 ELSE 1 END) * (CASE WHEN floor='R' THEN 999 WHEN floor='G' THEN 0 ELSE to_number(substring(floor FROM '[0-9].*$'),'999') END)) - (CASE WHEN substr(floor, 1, 1)='M' THEN 0.5 ELSE 0 END)) AS rfloor testdb-# FROM shop_order ORDER BY rfloor; shop | floor | rfloor ------------------+-------+-------- JTB | B2 | -2 Loft | B1 | -1 丸亀製麺 | G | 0 スターバックス | 1 | 1 チャンスセンター | M2 | 1.5 ダイソー | 2 | 2 KALDI | 2 | 2 スタジオアリス | M3 | 2.5 ユニクロ | 3 | 3 無印良品 | 5 | 5 築地銀だこ | R | 999 (11 rows) なんとかなりそう。 ここまでくると、プログラムの方でやった方が良い気もしてくるが。 これで式を ORDER BY に入れておく。 SELECT shop, floor FROM shop_order ORDER BY (((CASE WHEN substr(floor, 1, 1)='B' THEN -1 ELSE 1 END) * (CASE WHEN floor='R' THEN 999 WHEN floor='G' THEN 0 ELSE to_number(substring(floor FROM '[0-9].*$'),'999') END)) - (CASE WHEN substr(floor, 1, 1)='M' THEN 0.5 ELSE 0 END)); 東急ハンズみたいな建物が出てこないことを祈りながら。 |
by Tatsuyoshi since 2003 |