全ては時の中に…

システム開発全般の技術や開発に役立つツール、プログラミングのサンプルを紹介しています。

SQL

【SQL Server】画像ファイルをSQL文でINSERTする

SQL Serverを扱った場合に、画像ファイルをSQL文でデータベースに取り込む方法について説明します。
画像ファイルをSQL文でデータベースに取り込む場合、OPENROWSET()関数を利用します。

SQL文は、以下のようなものとなります。
INSERT INTO テーブル名(項目名1, 項目名2)
SELECT 値1, BulkColumn
FROM OPENROWSET(BULK N'画像ファイルのパス', SINGLE_BLOB)

上記のSELECT文中にBulkColumnという項目名があります。
このBulkColumnという項目名を指定すると、OPENROWSET()関数で取得したバイナリデータを読み取ることができます。
これをINSERT文で指定するデータ項目として利用します。
(その他の項目は、定数で指定する等して下さい)
続きを読む

【SQL Server】WHERE条件で全角と半角文字を区別する(其の弐)

記事「【SQL Server】WHERE条件で全角と半角文字を区別する」の続きです。
前回は、WHERE句に指定する条件式が1つしかない場合にCOLLATE句を指定する方法について説明しました。
今回は、WHERE句に複数の条件を指定する場合にCOLLATE句を指定する方法について説明します。

以下、サンプル。
続きを読む

【SQL Server】WHERE条件で全角と半角文字を区別する

SQL Serverのデフォルトの設定では、WHERE句の条件で英数字を指定すると全角と半角の区別をせずにデータを取得してしまいます。
これは、照合順序というものが影響しています。
特定のSQL文のみで照合順序を変更したい場合には、COLLATE句を利用します。

以下、サンプル。
続きを読む

【SQL Server】文字列から指定した文字列の文字位置を取得する

SQLを利用して、ある文字列から指定した文字列の文字位置を取得したいことがあります。
SQL Serverで文字位置を検索する方法について説明します。
文字位置を検索するには、CHARINDEX()関数を利用します。

《構文》
CHARINDEX('検索する文字列', '検索対象となる文字列')
CHARINDEX('検索する文字列', '検索対象となる文字列', 検索開始位置)

以下、サンプル。
続きを読む

【Oracle】文字列から指定した文字列の文字位置を取得する

SQLを利用して、ある文字列から指定した文字列の文字位置を取得したいことがあります。
Oracleで文字位置を検索する方法について説明します。
文字位置を検索するには、INSTR()関数を利用します。

《構文》
INSTR('検索対象となる文字列', '検索する文字列')
INSTR('検索対象となる文字列', '検索する文字列', 検索開始位置, n番目)

以下、サンプル。
続きを読む

【SQL】集計関数に複数の項目を指定する

SQLの集計関数(COUNT(), MIN(), MAX()等)には、1つの引数しか渡すことができません。
そのため、複数の項目値を集計関数の引数に指定したい場合、複数の項目を連結した値を引数として渡す必要があります。

項目の連結方法には、以下の方法があります。
 1.文字列として連結する。
 2.数値として連結する。

どちらの方法も、桁数を合わせるための調整が必要になります。

以下、サンプル。
続きを読む

【SQL】CASEで項目の値によって処理を分岐する

SQLの条件分岐の方法として、記事「【SQL】CASEステートメント」でCASE式のことを説明しました。
このCASE式は、以下のように記述することもできます。

CASE 項目名
WHEN 値1 THEN 項目が値1の場合の処理
WHEN 値2 THEN 項目が値2の場合の処理
ELSE WHENで指定した値以外の場合の処理
END


以下、サンプル。
続きを読む

【SQL】CASE式でNULLかどうかを判定する

SQLのCASE式に記載する条件である値がNULLかどうかを判定する方法について説明します。
CASE式である値がNULLかどうかを確認する場合には、「WHEN 項目名 IS NULL」の形式で指定します。
NULLかどうかを確認する場合の構文は、以下のようになります。
CASE WHEN 項目名 IS NULL THEN 式1 ELSE 式2 END

※式1は項目名がNULLである場合の処理を、式2は項目名がNULLではなかった場合の処理を記述します。

以下、サンプル。
続きを読む

【SQL】大文字を小文字(小文字を大文字)に変換する

文字列の比較をする場合に大文字と小文字を区別せずに比較したい場合があります。
このような場合、大文字、または、小文字に変換して比較します。
SQLで大文字を小文字を変換する方法と小文字を大文字に変換する方法について説明します。

大文字を小文字に変換する場合は、LOWER関数を利用します。

【構文】
  SELECT LOWER(項目名) FROM テーブル名

逆に小文字を大文字に変換する場合は、UPPER関数を利用します。

【構文】
  SELECT UPPER(項目名) FROM テーブル名

上記の関数は、取得する項目だけでなく、WHERE条件に指定する項目や比較対象となる文字列にも利用できます。

以下、サンプル。
続きを読む

【SQL】データを登録する(Insertステートメント)

データベースにデータを登録するには、INSERTステートメントを利用します。
INSERTステートメントの構文は、以下の通りです。

INSERT INTO テーブル名 [(列名1, 列名2, ...)]
VALUES (値1, 値2, ...)

上記の構文でテーブル名の後に指定する列名は省略可能です。
但し、列名を省略する場合には、全ての項目に値を設定する必要があります。
※列名を指定する場合は、指定した列名にのみ値を設定した状態でデータを追加することができます。

以下、サンプル。
続きを読む

【Oracle】FOR UPDATE句の使用について

以前の記事「【Oracle】SQLでデータをロックする」でFOR UPDATE句について説明しました。
FOR UPDATEに関する補足情報です。

以下を含むSQLステートメントには、FOR UPDATE句は利用できません。
 1.外部結合(OUTER JOIN)
  →LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN
 2.GROUP BY句
 3.グループ関数
 4.DISTINCT
 5.CONNECT BY句
 6.UNION, INTERSECT, MINUS等の集合演算

上記の内、1つでも該当するものがある場合、以下のエラーが表示されます。
 「ORA-02014 DISTINCT、GROUP BY などを含むビューに対してFOR UPDATE 句を使用できません」
続きを読む

【SQL】更新の条件に別テーブルの項目を利用する

データの更新を行う場合に指定したテーブルとは、別のテーブルの項目を条件に指定したいことがあります。
このような場合の指定方法について説明します。

UPDATEステートメントでは、通常、1つのテーブルのみを指定します。
そのため、別のテーブルを条件に指定する場合には、WHERE条件で副問い合わせを行う必要があります。
※DBMSによっては、1つのUPDATEステートメントで複数テーブルの更新をサポートしている場合もありますが、WHERE条件に複数のテーブルを利用する場合には、やはり、副問合せを利用します

以下、サンプル。
続きを読む

【SQL】副問合せの結果を使って更新する

以前の記事「【SQL】項目を更新する(UPDATEステートメント)」の応用で、別のテーブルに設定されている値を使って、項目を更新する方法について説明します。
このような場合、以下の方法で実装することができます。
 1.副問合せを利用する
 2.繰り返し(Fetchステートメント)を利用する
  →Fetchについては、以前の記事「【SQL Server】繰返処理(Fetch)を利用する 」を参照して下さい。

今回は、「1.副問合せを利用する」の方法について説明します。
この方法は、SETで指定する右辺にSELECTステートメントを記述し、その結果を利用して更新することになります。

以下、サンプル。
続きを読む

【SQL】項目を更新する(UPDATEステートメント)

SQLでデータの更新を行う場合、UPDATEステートメントを利用します。
UPDATEステートメントについて、説明します。

UPDATEステートメントの構文は、以下の通りです。

【構文】
《更新項目が1項目の場合》
UPDATE テーブル名
SET 項目名1 = 更新する値
WHERE 条件式

《更新項目が複数項目の場合》
UPDATE テーブル名
SET 項目名1 = 更新する値,
項目名2 = 更新する値
WHERE 条件式

斜体の部分には、以下の値を指定します。
続きを読む

【SQL Server】サブフォルダ名と階層を取得する

アンドキュメンテッド ストアドプロシージャ(非公開のストアドプロシージャ)を利用すれば、指定したフォルダのサブフォルダ名とその階層の深さを取得することができます。
これを実現するためには、「xp_dirtree」を利用します。

【構文】
EXEC xp_dirtree 'フォルダパス'


結果として、subdirectory(サブフォルダ名)とdepth(階層の深さ)を取得できます。
指定したフォルダパスが存在しない場合には、結果は0件となります。
(エラーは発生しません)

以下、サンプル。
続きを読む
Recent Comments
Recent TrackBacks
Profile

ふりっつ

システムエンジニア
取得資格:
 ソフトウェア開発技術者
 MCP(70-290)
メールマガジン:
 【出張版】全ては時の中に…

メールマガジン
メルマガ登録・解除
【出張版】全ては時の中に…
 
 powered by メルマガスタンドmelma! トップページへ
ブログランキング
アクセス解析出会い




にほんブログ村 IT技術ブログへ

にほんブログ村 IT技術ブログ プログラム・プログラマへ

Amazon
スポンサー
HonyaClub.com

PCDEPOT WEB本店/OZZIO

FUJIFILMMALL(フジフイルムモール)

IT 関連資格ならクラムメディア問題集

  • ライブドアブログ