MW211 EXIT

devlog
DB設計/年齢と誕生日に見るDB設計
2015年06月13日
【管理】
  ・「誕生日」から「年齢」を計算できるが、
    「年齢」からは「誕生日」を逆算できない
    よって、管理したいのは「誕生日」
    →値の価値を見極めること
【計算】
  ・「誕生日」と現在日から「年齢」を算出できるが、
    都度やっていては手間がかかり反応が遅い
    (あらかじめ算出しておいた)「年齢」を直接もっていれば速い
    但し、「年齢」は日々変わるので日次バッチ処理にて再計算する必要あり
    →CPUの性能向上により現実には気にならない差異ではあるが
      件数が膨大な場合、計算量が多い場合には馬鹿にならない
  ・「満年齢」なら日次処理が必要だが、「数え年」なら(元旦の)年次処理で済む
    →効率を優先しての前提条件の変更も選択肢としてはある
【入手】
  ・情報を入手しやすいのは「年齢」
    #例えば新聞記事においては、たまに関係者の「年齢」の記載があるが、
      「誕生日」まで記載されているのは稀
    →現実問題として、できること(入手できる情報)は限られている
  ・「年齢」とそれが公表された日を記録しておけば、
    ある程度「誕生日」を絞り込むことができる(生年など)
    →時には付加情報も管理すべし
  ・「年齢」と「公表日」の対の情報は複数に渡る場合も予想される
    →正規化の必要性
  ・「年齢」と「公表日」の情報は必須ではないし、ない場合が多い
    #「誕生日」がわかっていれば、「年齢」や「公表日」はそもそもいらない
    →表形式の限界(表の分離も必要)
分類:SQL
MSSQL/日時型の生成
2015年06月10日
年、月といったint型からdate型もしくはdatetime型を生成する方法。

date型を生成。
┌──────────────────────────────────────┐
│SELECT DATEFROMPARTS(年, 月, 日);                                           │
└──────────────────────────────────────┘

datetime型を生成。
┌──────────────────────────────────────┐
│SELECT DATETIMEFROMPARTS(年, 月, 日, 時, 分, 秒, ミリ秒);                   │
└──────────────────────────────────────┘
分類:MSSQL
MSSQL/日付を年度に変換
2015年06月08日
泥臭くやるしかないみたい(そもそも年度は統一されてないし)

以下は四月始まりの年度の場合。
┌──────────────────────────────────────┐
│SELECT [日付],                                                              │
│       CASE                                                                 │
│         WHEN MONTH([日付]) < 4 THEN YEAR([日付]) - 1                       │
│         ELSE                        YEAR([日付])                           │
│       END AS [年度]                                                        │
│    FROM [表];                                                              │
└──────────────────────────────────────┘
分類:MSSQL
ExcelVBA/ADODBのNULL
2015年06月07日
ExcelVBAのADODBでストアドプロシージャの引数に「NULL」を指定したい場合は?
┌──────────────────────────────────────┐
│With SQLコマンド                                                            │
│    .ActiveConnection = データベース                                        │
│    .CommandType = adCmdStoredProc                                          │
│    .CommandText = "PROCEDURE_ストアドプロシージャ"                         │
│    .NamedParameters = True                                                 │
│    .Parameters.Append .CreateParameter("@引数", adInteger, adParamInput)   │
│    .Parameters("@引数").Value = Null                                       │
│    .Execute                                                                │
│End With                                                                    │
└──────────────────────────────────────┘
まんま「Null」を代入!
分類:ExcelVBA
Excel/シングルクォーテーション
2015年06月06日
セルの先頭にシングルクォーテーション「'」を入力すると文字列になる。

数値でも「'123」とすれば、文字列扱いになる。

但し、先頭の「'」は表示されない。(数式バーでは表示されるが)

セルの接頭辞という別世界のデータになるためだ。(数式バーは「接頭辞+値」を表示)

セルの接頭辞は、ExcelVBAにおいては「セル.PrefixCharacter」で値を参照できる。
→「」もしくは「'」

セルの接頭辞に「'」が設定されているのをExcelVBAで除去するには、
値を再代入すればよい。
「セル.Value = セル.Value」
#「セル.PrefixCharacter = ""」みたいな直接の代入はできない。

数式バーで見える形に参照したい場合には、以下のような感じで
条件分岐してあげればよい。
┌──────────────────────────────────────┐
│If セル.PrefixCharacter <> "" Then                                          │
│    結果 = セル.PrefixCharacter & セル.Value                                │
│Else                                                                        │
│    結果 = セル.Value                                                       │
│End If                                                                      │
└──────────────────────────────────────┘

セル表示に「'」を付けたい場合には、
先頭の「'」を「''」を置換してあげればよいだろう。

ちなみに、「'」「Z」という接頭辞「'」がついているセルに値を代入した場合の挙動
  ・「A」を入力   → 「'」「A」  …接頭辞「'」は残ったまま
  ・「'A」を入力  → 「'」「A」  …接頭辞「'」が上書される
  ・「123」を入力 → 「」「123」 …接頭辞がなくなる
なので、
  ・「''」を入力  → 「'」「'」  …接頭辞「'」が上書される
ということで、「'」が雪だるま式に増えることはないようだ。
分類:Excel
設計/便利だけど危険なもの
2015年06月05日
┌──────────────────────────────────────┐
│○Goto文の使用                                                    (⇔構造化)│
│○グローバル変数の濫用                                                      │
│○Private修飾子の軽視(Public修飾子の濫用)                                   │
│○Static修飾子の軽視                                                        │
│○Variant型の濫用                                                           │
│○Const修飾子の軽視                                                         │
│○Option_Explicitの軽視                                                     │
│○コンパイルオプションの緩慢化                                              │
│ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -│
│△構造体の濫用                                                              │
│△連想配列の濫用                                                            │
│△Return文・Break文・Continue文の濫用                                       │
└──────────────────────────────────────┘
  そりゃルールがなけりゃ楽だよ、でも、とってもめんどくさくなるんだよ。
分類:設計
秀丸/左右交換
2015年06月04日
「ABC[123]」を「[123]ABC」にする置換方法(正規表現で)。
┌───┬──────────────────────────────────┐
│置換前│([^\[\]]*)(\[.*\])                                                  │
├───┼──────────────────────────────────┤
│置換後│\2\1                                                                │
└───┴──────────────────────────────────┘
分類:秀丸エディタ
MSSQL/自動採番(SEQUENCE)
2015年05月29日
連番などの自動採番には属性に「IDENTIFY」を設定するやり方があるが
「SEQUENCE」を使用するやり方もある

まず、基本的な定義は以下の通り。(1から+1していく)
┌──────────────────────────────────────┐
│CREATE SEQUENCE 連番 AS int                                                 │
│    START WITH 1                                                            │
│    INCREMENT BY 1;                                                         │
└──────────────────────────────────────┘

そして使用方法は以下のような感じ
┌──────────────────────────────────────┐
│SELECT NEXT VALUE FOR 連番;                                                 │
└──────────────────────────────────────┘
これを(SELECT以外を)、INSERT文で代入してやればよい。

現在値を確認するには「sys.sequences」の中を覗くとよい。
┌──────────────────────────────────────┐
│SELECT current_value                                                        │
│    FROM sys.sequences                                                      │
│    WHERE name = '連番';                                                    │
└──────────────────────────────────────┘

現在値を変更するには以下のような感じにすればよい。(以下は、現在値を「1」にする)
┌──────────────────────────────────────┐
│ALTER SEQUENCE 連番 RESTART WITH 1;                                         │
└──────────────────────────────────────┘

「1~100」の間で循環させる場合には以下のような感じに定義してあげる。
┌──────────────────────────────────────┐
│CREATE SEQUENCE 連番 AS int                                                 │
│    START WITH 1                                                            │
│    INCREMENT BY 1                                                          │
│    MINVALUE 1                                                              │
│    MAXVALUE 100                                                            │
│    CYCLE;                                                                  │
└──────────────────────────────────────┘

「IDENTIFY」と比較しての利点となれば
これは複数の表で共用できるというところであろう。
つまり、連番が特定の表から独立した感じになる。
分類:MSSQL
MSSQL/リストア(タイムライン)
2015年05月28日
「SQL Server 2014 Management Studio」からバックアップファイルを
リストアする方法。

「オブジェクトエクスプローラー」(ツリー)上の
「データベース」もしくは「システムデータベース」で右クリックし
「データベースの復元」を選択し、ウインドウを開く。

「ソース」の「デバイス」を選択し、バックアップファイルを指定する。

後は、「OK」ボタンで実行するだけ。

・複数のDBを同時にリストアはできない模様
・時々、回線断などでエラーとなる場合があるが、その場合は、再度実行すればよい
・他でそのDBを使用している場合もエラーとなる(この場合も再実行)

バックアップファイル指定後、「転送先」に各種情報が表示されるが、
そこで「タイムライン」ボタンを押すと
バックアップ時点より前の日時に遡ってリストアすることができる。
分類:MSSQL
MSSQL/Profiler(2)使用方法
2015年05月27日
「SQL Server 2014 Management Studio」のメニューバーの「ツール」より
「SQL Server プロファイラー」を選択し起動させる。

すると「SQL Server 2014 Management Studio」の起動時と同様に接続先聞いてくるので
トレース対象の「SQL Server」に接続する。

トレースのプロパティ設定を聞いてくるので、任意のトレース名で設定を行う。
実行(設定)を行うと、トレースが実行される(Windowが開く)。
#アイコンバーの再生ボタンが押された形となる

後は、SQL文が実行されるのを監視するだけ。

終了したい場合には、停止ボタンを押す。

トレースのプロパティ設定時に、ファイルへの出力やテーブルへの出力も設定できる。

ファイルへ出力を設定すると「.trc」拡張子のファイルに出力される。
後で、本ファイルをダブルクリックすれば「SQL Server Profiler」が起動し
トレースWindowでトレースされた内容が表示される。
#本画面の場合、再生ボタンに当たるものを実行すると
  その内容で再生(再実行)されるらしい
分類:MSSQL
前へ 1 … 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 … 156 次へ