MdbCommandで利用できるSQLデータ型についてまとめます。まずは数値から。
こんにちは。
mdbファイルを操作できるMdbCommandで利用できるSQLデータ型と、
対応する.NETのクラスについてまとめます。
今回は、数値について記述します。
利用できるSQLデータ型は、ほぼMS ACCESSと同じです。
◆MS ACCESS:SQL データ型
http://office.microsoft.com/ja-jp/access-help/HP001032248.aspx?CTT=5&origin=HP001032229
SQLで入力するデータ型 数値
データ型 | SQLで入力する データ型 |
対応する .NETクラス |
備考 | ||
---|---|---|---|---|---|
TINYINT | tinyint byte |
[byte] | 0 〜 255 の整数 | ||
SMALLINT | smallint short |
[int16] | -32,768 〜 32,767 の整数 | ||
INTEGER | long int integer |
[int32] | -2,147,483,648 〜 2,147,483,647 の整数 | ||
REAL | real single |
[single] | 4 バイトの範囲で小数 | ||
FLOAT | float double |
[double] | 8 バイトの範囲で小数 | ||
DECIMAL | decimal numeric |
[decimal] | decimal(10,5) のように指定すると整数5ケタ、少数5ケタになります | ||
MONEY | money currency |
[decimal] | -922,337,203,685,477.5808 〜 922,337,203,685,477.5807 の小数 |
[byte]は、System.Byte型をあらわします。
MdbCommadを使って、テーブルを作成
整数
PS (1) > ipmo .\MdbCommand PS (2) > open-mdb testdata.mdb -Create PS (3) > invoke-mdb "create table intdata (byteA byte, shortA short, intA int)"
テーブル内の列のデータ型を調べるには、Get-MdbColumn を使用します。
PS (4) > get-mdbcolumn intdata TableName Pos ColumnName DataType AliasType Size NotNull Default PKey AutoInc --------- --- ---------- -------- --------- ---- ------- ------- ---- ------- intdata 1 byteA TINYINT byte intdata 2 shortA SMALLINT short intdata 3 intA INTEGER int
データを登録します。
PS (5) > invoke-mdb "insert into intdata values (1,1,1)"
データを参照します。
PS (6) > invoke-mdb "select * from intdata" byteA shortA intA ----- ------ ---- 1 1 1
対応する.NETクラスを調べます。
PS (7) > invoke-mdb "select * from intdata"|get-member TypeName: MdbCommand.MdbRecord Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() byteA NoteProperty System.Byte byteA=1 intA NoteProperty System.Int32 intA=1 shortA NoteProperty System.Int16 shortA=1
表にあるように、System.Byte、System.Int16、System.Int32が対応します。
System.Int64のデータは、格納するデータ型がありません。
(※SQLでlongと書いてもintになります。)
パラメータを使って、データを登録します。
PS (8) > invoke-mdb "insert into intdata values (?, ?, ?)" 2,3,4 PS (9) > invoke-mdb "select * from intdata"| ft -auto byteA shortA intA ----- ------ ---- 1 1 1 2 3 4
パラメータは、?で記述します。
小数
PS (10) > invoke-mdb "create table decdata (singleA single, doubleA double, decimalA decimal(10,5))" PS (11) > Get-MdbColumn decdata TableName Pos ColumnName DataType AliasType Size NotNull Default PKey AutoInc --------- --- ---------- -------- --------- ---- ------- ------- ---- ------- decdata 1 singleA REAL single decdata 2 doubleA FLOAT double decdata 3 decimalA DECIMAL numeric 10,5 PS (12) > invoke-mdb "insert into decdata values (1.1, 2.22, 3.33)" PS (13) > invoke-mdb "select * from decdata" singleA doubleA decimalA ------- ------- -------- 1.1 2.22 3.33000 PS (14) > invoke-mdb "select * from decdata"|gm TypeName: MdbCommand.MdbRecord Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() decimalA NoteProperty System.Decimal decimalA=3.33000 doubleA NoteProperty System.Double doubleA=2.22 singleA NoteProperty System.Single singleA=1.1
小数のほうも、System.Single、System.Double、System.Decimalがそれぞれ対応します。
get-member で見たときの並び順は、Nameの順になるので注意です。
小数もパラメータを使って、データを登録します。
PS (15) > $values = ([single]::MaxValue),([double]::MaxValue),12345.12345 PS (16) > invoke-mdb "insert into decdata values (?,?,?)" $values PS (17) > invoke-mdb "select * from decdata"| ft -auto singleA doubleA decimalA ------- ------- -------- 1.1 2.22 3.33000 3.402823E+38 1.79769313486232E+308 12345.12345
お金
PS (18) > invoke-mdb "create table moneydata (moneyA money)" PS (19) > invoke-mdb "insert into moneydata values (29800)" PS (20) > invoke-mdb "insert into moneydata values (199.75)" PS (21) > invoke-mdb "select * from moneydata" | ft -auto moneyA ------ 29800 199.75 PS (22) > invoke-mdb "select * from moneydata" | % {$_|gm} TypeName: MdbCommand.MdbRecord Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() moneyA NoteProperty System.Decimal moneyA=29800 Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() moneyA NoteProperty System.Decimal moneyA=199.75
MONEYは、System.Decimalに対応します。
次回は、文字列について記述します。
今日のコマンド
PS (1) > ipmo .\MdbCommand
PS (2) > open-mdb testdata.mdb -Create
PS (3) > invoke-mdb "create table intdata (byteA byte, shortA short, intA int)"
PS (4) > get-mdbcolumn intdata
PS (5) > invoke-mdb "insert into intdata values (1,1,1)"
PS (6) > invoke-mdb "select * from intdata"
PS (7) > invoke-mdb "select * from intdata"|get-member
PS (8) > invoke-mdb "insert into intdata values (?, ?, ?)" 2,3,4
PS (9) > invoke-mdb "select * from intdata"| ft -auto
PS (10) > invoke-mdb "create table decdata (singleA single, doubleA double, decimalA decimal(10,5))"
PS (11) > Get-MdbColumn decdata
PS (12) > invoke-mdb "insert into decdata values (1.1, 2.22, 3.33)"
PS (13) > invoke-mdb "select * from decdata"
PS (14) > invoke-mdb "select * from decdata"|gm
PS (15) > $values = ([single]::MaxValue),([double]::MaxValue),12345.12345
PS (16) > invoke-mdb "insert into decdata values (?,?,?)" $values
PS (17) > invoke-mdb "select * from decdata"| ft -auto
PS (18) > invoke-mdb "create table moneydata (moneyA money)"
PS (19) > invoke-mdb "insert into moneydata values (29800)"
PS (20) > invoke-mdb "insert into moneydata values (199.75)"
PS (21) > invoke-mdb "select * from moneydata" | ft -auto
PS (22) > invoke-mdb "select * from moneydata" | % {$_|gm}