SQL Serverのデータ型一覧|文字列・数値・日付/時刻型を徹底解説
SQL Server(Transact-SQL)には、文字列・数値・日付/時刻など、さまざまなデータ型が用意されています。この記事では、各データ型の構文、最大サイズ、値の範囲、特徴を一覧形式でわかりやすくまとめて紹介します。
SQL Serverの文字列データ型
SQL Server(Transact-SQL)で使用できる主な文字列系データ型は以下のとおりです。
| データ型の構文 | 最大サイズ | 説明 |
|---|---|---|
| CHAR(n) | 最大8,000文字 | nは格納する文字数。固定長で、指定した文字数に満たない場合は右側が空白で埋められます。Unicode文字は格納できません。 |
| VARCHAR(n) または VARCHAR(max) | 最大8,000文字/max指定時は2GB | nは格納する文字数。可変長です。maxを指定した場合は最大2GBまで格納できます。Unicode文字は格納できません。 |
| TEXT | 最大2GB | 可変長の文字列データ。Unicode文字は格納できません。 |
| NCHAR(n) | 最大4,000文字 | 固定長。Unicode文字を格納できます。 |
| NVARCHAR(n) または NVARCHAR(max) | 最大4,000文字/max指定時は2GB | nは格納する文字数。可変長で、Unicode文字を格納できます。 |
| NTEXT | 最大1,073,741,823バイト | 可変長。Unicode文字を格納できます。 |
| BINARY(n) | 最大8,000バイト | nは格納するバイト数。固定長で、足りない部分は右側が0x00で埋められます。バイナリデータ用の型です。 |
| VARBINARY(n) または VARBINARY(max) | 最大8,000バイト/max指定時は2GB | nは格納するバイト数。可変長のバイナリデータ型です。 |
| IMAGE | 最大2GB | 可変長のバイナリデータ型です。 |
なお、TEXT・NTEXT・IMAGEの3つの型は旧式のデータ型で、現在は非推奨(廃止予定)とされています。新規の開発では、代わりにVARCHAR(max)、NVARCHAR(max)、VARBINARY(max)を使用することが推奨されます。
SQL Serverの数値データ型
続いて、SQL Server(Transact-SQL)で使用できる主な数値系データ型の一覧です。
| データ型の構文 | 説明 |
|---|---|
| BIT | 整数値 0、1、またはNULLを格納します。 |
| TINYINT | 0 ~ 255 の範囲の整数。 |
| SMALLINT | -32,768 ~ 32,767 の範囲の整数。 |
| INT | -2,147,483,648 ~ 2,147,483,647 の範囲の整数。 |
| BIGINT | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 の範囲の整数。 |
| DECIMAL(p, s) | pは全体の有効桁数(未指定時の既定値は18)、sは小数点以下の桁数(未指定時の既定値は0)。 |
| DEC(p, s) | DECIMALの別名(シノニム)。動作はDECIMALと同じです。 |
| NUMERIC(p, s) | DECIMALの別名(シノニム)。動作はDECIMALと同じです。 |
| FLOAT(n) | nは仮数部を格納するビット数。未指定の場合は53が適用されます。 |
| REAL | FLOAT(24)と同等の浮動小数点数型。 |
| SMALLMONEY | -214,748.3648 ~ 214,748.3647 の範囲の通貨型。 |
| MONEY | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 の範囲の通貨型。 |
SQL Serverの日付/時刻データ型
最後に、SQL Server(Transact-SQL)で使用できる主な日付/時刻系データ型の一覧です。
| データ型の構文 | 説明 |
|---|---|
| DATE | '0001-01-01' ~ '9999-12-31' の範囲の日付値。表示形式は 'YYYY-MM-DD'。 |
| DATETIME | 日付は '1753-01-01 00:00:00' ~ '9999-12-31 23:59:59' の範囲。時刻の精度は約3.33ミリ秒(.997まで)。表示形式は 'YYYY-MM-DD hh:mm:ss[.mmm]'。 |
| DATETIME2 | 日付は '0001-01-01' ~ '9999-12-31'、時刻は '00:00:00' ~ '23:59:59.9999999' の範囲。小数秒の精度を指定できます。表示形式は 'YYYY-MM-DD hh:mm:ss[.nnnnnnn]'。 |
| SMALLDATETIME | 日付は '1900-01-01' ~ '2079-06-06'、時刻は '00:00:00' ~ '23:59:59' の範囲。時刻は分単位の精度です。表示形式は 'YYYY-MM-DD hh:mm:ss'。 |
| TIME | '00:00:00.0000000' ~ '23:59:59.9999999' の範囲の時刻のみを格納します(日付情報は含みません)。 |
| DATETIMEOFFSET | 日付・時刻に加えてタイムゾーンオフセット(-14:00 ~ +14:00)を格納します。表示形式は 'YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm]'。 |
用途に応じて適切なデータ型を選択することは、ストレージ容量の節約やクエリパフォーマンスの向上につながります。特に、日本語などのマルチバイト文字を扱う場合はNVARCHAR系を使用すること、金額を扱う場合はMONEY系、日付・時刻は求める精度に合わせてDATE・DATETIME・DATETIME2を使い分けることがポイントです。
-
SQL Server 2016の行レベルセキュリティ(RLS)とは?仕組みと実装方法をわかりやすく解説
Microsoft®はSQL Server®においてセキュリティに力を入れており、ほぼすべてのリリースで既存機能の強化や新たなセキュリティ機能が導入されてきました。SQL Server 2016では、データ保護に役立つ多くの新しいセキュリティ機能が登場しました。代表的なものとして、行レベルセキュリティ(Row-Level Security:RLS)、Always Encrypted、動的データマスキング(Dynamic Data Masking)が挙げられます。 はじめに 前回の記事では、SQL Server 2016の動的データマスキングについてご紹介しました。本記事では、テーブル内のどの行
-
統合データプラットフォーム「SQL Server 2019」徹底解説:ビッグデータ時代の新スタンダード
「データは新しいオイル」という言葉の起源 2006年、イギリスの数学者クライヴ・ロバート・ハンビーは「Data is the new Oil(データは新しいオイルだ)」という言葉を残しました。それ以来、IT業界のリーダーたちはこの言葉を繰り返し耳にし、その思想に共鳴しながら、データ活用への取り組みを一段と深めてきました。 ハンビーはさらにこう述べています。「データは確かに価値あるものだが、精製されなければ本来の力を発揮できない。石油がガソリンやプラスチック、化学製品へと加工されて初めて利益を生む活動を牽引する存在になるように、データも分解と分析を経て初めて真の価値を持つのだ。」 多くのITリー