3流プログラマのメモ書き

元開発職→現社内SEの三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

SQL

(SQLite)Select句で計算をした場合に小数にする方法

例えば以下のようなテーブルがあるとします。(全てINTEGER型) key num1 num2 1 10 3 2 10 8 3 30 11 で、num2 の num1 に対する割合をSQL実行時に求めたいとします。 当初以下のようにしてました。 select key , num1 , num2 , num2/num1 as res from tbl し…

SQLiteは日付型がない

SQLiteのカラムの型には日付型がありません。 日付型として保存したい場合は、テキスト型のカラムで以下のような書式で保存するといいようです。 ・日付のみ。 YYYY-MM-DD ・時刻も含む場合。 YYYY-MM-DD HH:MM:SS SQLiteで日付指定のみで演算する場合は以下…

(SQLite)FULL OUTER JOINの代用方法

以前,(SQL)Access(JET)で FULL OUTER JOIN を行うで、FULL OUTER JOINをサポートしていないAccessで完全外部結合を行う方法を書きました。 SQLiteもFULL OUTER JOINがサポートされていないので、完全外部結合を行う場合同様の方法を用いてやる必要があります…

(SQL)テーブル名にハイフン入ってる時はクォートする必要あり

SQL

SQLiteでついハイフン(-)入のテーブルを作ってしまい、以下の用なクエリを実行したらエラーになりました。 SELECT * FROM hoge-test WHERE name='moe'; テーブル名にハイフンが入っていると、ダメなようです。 これは、SQLiteに限らず他のDBMS(MySQLやSQL Se…

SQLiteManagerでUTF-8でデータを保存したい

SQL

SQLite内のデータベースを容易に管理するためにPHP上で動く SQLiteManager を入れてみたんですが、どうやら日本語に設定するとEUC-JPで動くらしく、UTF-8のデータをみると文字化けします。 ということで SQLiteManager でUTF-8のデータを扱う方法ですが、lan…

(MySQL)ログイン時のパスワード指定と外部SQLファイルの実行

SQL

余り普段使わない MySQL ではログインでも四苦八苦する時があります。 (MySQL)スクリプトファイルからクエリを実行する方法では、MySQLクライアントにログインしてから外部ファイルを読み込んでますが、今回はコマンドラインから直接外部ファイルを読み込む…

(SQL)SQL Server 2005 でDBログインユーザとデータベースユーザの一覧取得

SQL

SQL Server のデータベースログインユーザと、各データベースのユーザをSQLで列挙する方法です。 ログインユーザは master データベースの syslogins テーブルに定義されているようです。 データベースユーザは各データベースの sysusers テーブル定義されて…

OLEDB JETでクエリを投げると、式が複雑すぎますと怒られた

SQL

ADO.Net を使って MDBへ のクエリ実行時に「式が複雑すぎます。」という例外で怒られました。 確かに、WHERE句に相当数の条件を入れています。 例えばこんな感じ。(パラメータクエリを使ってます。詳しくは(ADO.Net)OLEDB経由でのMDBへの副問い合わせにパラメ…

AccessとOLEDB JET経由でLIKE文のワイルドカードが変わる

SQL

Access で LIKE 演算子で0文字以上の文字を表す時は * を使いますよね。 ところが、JETエンジン使って mdb にアクセスする OLEDB経由の ADO.Net だと % という純粋なSQLに近い形しないとダメなようです。 /*Accessだとヒットする。 OLEDB経由だとヒットしな…

(SQL)現在の日時を数値(整数)で落としたい

SQL

SQL Server で現在日時を取得して、整数の文字列として保存する方法です。 あんまり需要は無いかもしれませんが、今回保存する汎用テーブル構造が キー:nvarchar(50) , 値:nvarchar(50) なので、こういう方法で。。。 下記のように convert 関数を使って、い…

(SQL Server)データベース復元時に必要な権限

SQL

あるデータベース専用のユーザを作って、db_owner のロールを与えてます。 バックアップもうまくいったんで、てっきり復元もできるかと思ったら、 System.Data.SqlClient.SqlError: ユーザーにはデータベース 'データベース名' を復元する権限がありません。…

(SQL Server)データベースの復元時にエラーナンバー:3102が発生

SQL

ある SQL Server のユーザでログインし、データベースを復元しようとすると下記のようなエラーが。。。 System.Data.SqlClient.SqlError: データベース 'データベース名' はこのセッションで使用中なので、RESTORE では処理できません。この操作を実行すると…

(SQL Server)バッチでシステムドライブにあるmdfファイルをアッタチさせようとしたけれど。。。

SQL

(SQL Server)SQLサーバの無人インストールとインストール後の各種設定設定 Part3とかなり関連のあるネタです。 バッチファイルで SQL Server 2005 Express のインストールと mdf のアタッチさせるんですが、mdf ファイルはシステムドライブの固定のフォルダ…

(SQL Server 2005)データベースの内容をダンプする bcp ツール

SQL

SQL Server で MySQL のダンプのようにデータを含むクエリを作ってくれる簡単な方法はないのかと思って調査してる時に見つけたツールです。 この bcp ツールというのは SQL Server に付属しており、テーブルデータのエクスポートやインポートが簡単にできる…

(SQL Server 2005) Express Edition は SQL Agent job スケジューリングサービス がない!?

SQL

無料でつかる SQL Server 2005 Express Editon を使おうという話になりました。 今回の要件はSQL Server 2005の任意のデータベースをバックアップするというものです。 ということで、ManagementStudio からバックアップジョブを登録しようとすると、エラー…

(.Net,SQL)プログラムからSQL Serverデータベースのバックアップを行う

SQL

.Net アプリケーションから SQL Server 2005 のバックアップを行う方法です。 最初は .Net からバッチかDOSコマンドで sqlcmd を使おうと思ってたのですが、よく考えたら ADO.Net 使ってやった方が簡単だということに気付いたんで、その方法でやることにしま…

(MySQL)パスワードの変更

SQL

MySQLのパスワード変更で自分の古いメモ書き見たら、下記のように書いてました。 ログイン >mysql -p -u root -h localhost パスワード変更 mysql> SET PASSWORD FOR root=password('abc'); で、この通りに打ったら、下記のようなエラーに。 ERROR 1133 (420…

(SQL)Access(JET)で FULL OUTER JOIN を行う

SQL

日別の集計データを取る SQL の作成を行うことになったのですが、データの種別毎に SQL を発行するとレスポンス的にもまずいかなと思い、一つのクエリで何とか取得出るようにしてみました。 たとえば下記のようなテーブルがあるとします。 Sales テーブル(主…

(SQL)SELECT句に副問い合わせを含める

SQL

SELECT句の副問い合わせはJOIN内の副問い合わせとは違い、外のフィールドが使えるので便利です。 たとえば、下記のように Customer テーブルと利用履歴を残した UseHistroy テーブルがあるとします。 Customer テーブル ┏━━━━━━━━━━━━━━━━━┓ ┃CustomerID Cus…

(SQL)グループ化したものを重複なしで数えるSQL(COUNT DISTINCT)

SQL

3流プログラマ苦手な SQL のメモです。 このようなテーブルがあるとします。 ┌─────┬───┬──┬────┐ │CustomerID│LineNo│Sex │AgeBy │ ├─────┼───┼──┼────┤ │3 │1 │1 │30 │ ├─────┼───┼──┼────┤ │3 │2 │1 │30 │ ├─────┼───┼──┼────┤ │3 │3 │1 │30 │ ├─────┼───…

(MySQL)スクリプトファイルからクエリを実行する方法

SQL

基本的なことですが、ついつい忘れてしまうのでメモメモ。 MySQLで、スクリプトファイルからクエリを実行する方法です。 mysqlクライントより下記のようにすることでできるようです。 mysql> source スクリプトファイル名; 参考: テキストファイル(スクリプ…

(SQL Server)SQL Serverのコマンドラインツール sqlcmd ではまる

SQL

まず、sqlcmdの引数。 これはどうやら大文字小文字を判別してるので注意が必要です。 下記は SQL Server 認証モードでログインするコマンドです。 sqlcmd -S localhost\SQL2005DEV -U sa -P 1234 (-U や -P がないとWindows 認証モードを使用して接続を試み…

(SQL Server)SQLサーバの無人インストールとインストール後の各種設定設定 Part3

SQL

(SQL Server)SQLサーバの無人インストールとインストール後の各種設定設定 Part2の続き(最終回)です。 今回はアプリケーションで使う初期データベースファイルのアタッチの方法です。 普通に CEREATE 文や INSERT 文で初期化してもいいのですが、今回はあら…

(SQL Server)SQLサーバの無人インストールとインストール後の各種設定設定 Part2

SQL

(SQL Server)SQLサーバの無人インストールとインストール後の各種設定設定 Part1の続きです。 ■SQL Serverへのネットワークアクセス許可 SQL Server Express はインストール直後はセキュリティの問題で、ネットワーク越しのアクセスができないようになってい…

(SQL Server)SQLサーバの無人インストールとインストール後の各種設定設定 Part1

SQL

SQL Server 2005 Express の無人インストールの設定と、インストール後の各種設定をコマンドでやる方法です。 システムに詳しくないところをターゲットにしたパッケージ等に使えると思います。 なお、インストール先にはまだ SQL Server が入ってないという…

AccessからSQL Serverへの移行は簡単!?

SQL

現在開発中ソフトのデータをAccessから多人数でも利用できるようにSQL Serverに移行しようとする話が上がってます。 データもそのままでSQL Server に移行したいらしいということです。当初は面倒だと思ってましたが、なんとAccessにはSQL Serverに簡単に移…

(SQL)顧客毎に日別で売上回数をカウント、売上金額合計を抽出するSQL

SQL

いつものごとく苦手SQLのためわかりにくい件名ですが、したいことは下記の通りです。 まず、下記のようなテーブルがあるとします。 Customerテーブル ┌───────────────────┐ │CustomerID CustomerName CustomerKana│ │3 新垣 アラガキ │ │4 戸田 トダ │ │21 …

(VB.Net、SQL)OLEDBでのパラメータクエリ

.NetからOLE DBでmdb(Access)に対してパラメータクエリをする方法です。 OLEDBでは名前付きパラメータは使えず、パラメータの順序で対応するプレースホルダが決まるみたいなので注意が必要です。 (でも、パラメータに名前があっても問題は無いようです) 下記…

(SQL)Accessでは結合条件にLiteralが書けない!?

SQL

この直前の記事(SQL)SQLで区分などの複数の意味を持たせてるテーブルを何回も結合する方法でSQLを紹介しましたが、あのSQLをAccessで実行したら「JOIN式はサポートされていません。」というエラーが出ました。 いろいろ試したところどうやら結合条件(ON句)で下…

(SQL)SQLで区分などの複数の意味を持たせてるテーブルを何回も結合する方法

SQL

ちょっと題名の意味がわけわかめですが、つまりまあこういうことです。 データベースで区分とか設定情報とかは意味が異なったとしても1つのテーブルにまとめることが多いと思います。 下記は区分の名称を1つのテーブルでもたした例です。 "SettingDiv"列が…