日付および時刻のスタイル
expression が日付や時刻のデータ型である場合、style には次の表に示すいずれかの値を指定できます。その他の値は 0 として処理されます。SQL Server では、アラビア式での日付形式がクウェート アルゴリズムによりサポートされます。
|
2 桁の年 (yy) (1)
|
4 桁の年 (yyyy)
|
標準
|
入力/出力 (3)
|
|---|
|
-
|
0 または 100 (1, 2)
|
既定値
|
mon dd yyyy hh:miAM (または PM)
|
|
1
|
101
|
米国
|
mm/dd/yyyy
|
|
2
|
102
|
ANSI
|
yy.mm.dd
|
|
3
|
103
|
イギリス/フランス
|
dd/mm/yyyy
|
|
4
|
104
|
ドイツ
|
dd.mm.yy
|
|
5
|
105
|
イタリア
|
dd-mm-yy
|
|
6
|
106 (1)
|
-
|
dd mon yy
|
|
7
|
107 (1)
|
-
|
Mon dd, yy
|
|
8
|
108
|
-
|
hh:mi:ss
|
|
-
|
9 または 109 (1, 2)
|
既定値 + ミリ秒
|
mon dd yyyy hh:mi:ss:mmmAM (または PM)
|
|
10
|
110
|
米国
|
mm-dd-yy
|
|
11
|
111
|
日本
|
yy/mm/dd
|
|
12
|
112
|
ISO
|
yymmdd
yyyymmdd
|
|
-
|
13 または 113 (1, 2)
|
ヨーロッパの既定値 + ミリ秒
|
dd mon yyyy hh:mi:ss:mmm(24h)
|
|
14
|
114
|
-
|
hh:mi:ss:mmm(24h)
|
|
-
|
20 または 120 (2)
|
ODBC 標準
|
yyyy-mm-dd hh:mi:ss(24h)
|
|
-
|
21 または 121 (2)
|
ODBC 標準 (ミリ秒を含む)
|
yyyy-mm-dd hh:mi:ss.mmm(24h)
|
|
-
|
126 (4)
|
ISO8601
|
yyyy-mm-ddThh:mi:ss.mmm (スペースなし)
|
|
-
|
127(6, 7)
|
ISO 8601 (タイム ゾーン Z)
|
yyyy-mm-ddThh:mi:ss.mmmZ
(スペースなし)
|
|
-
|
130 (1, 2)
|
Hijri (5)
|
dd mon yyyy hh:mi:ss:mmmAM
|
|
-
|
131 (2)
|
Hijri (5)
|
dd/mm/yy hh:mi:ss:mmmAM
|
1 これらのスタイル値で返される結果は非決定的です。この場合は、すべての (yy) (2 桁の年) スタイルと、(yyyy) (4 桁の年) スタイルのサブセットが対象となります。
2 既定値 (style 0 または 100、9 または 109、13 または 113、20 または 120、21 または 121) では、常に 4 桁の年 (yyyy) が返されます。
3 datetime 型に変換する場合は入力になり、文字データに変換する場合は出力になります。
4 XML で使用するよう設計されています。datetime または smalldatetime 型から文字データに変換する場合の出力形式は、前の表に示したとおりです。
5 Hijri とはいくつかのバリエーションがあるカレンダー システムです。SQL Server ではクウェート アルゴリズムが使用されます。
重要 : |
|---|
|
SQL Server の既定では、2 桁の年は、終了年 2049 年を基準に解釈されます。つまり、2 桁の年である 49 年は 2049 年、50 年は 1950 年と解釈されます。クライアント アプリケーションの中には、オートメーション オブジェクトをベースとするクライアント アプリケーションのように、2030 年を終了年とするものも多くあります。SQL Server では構成オプション two digit year cutoff が用意されており、このオプションを使用して SQL Server の終了年の設定を変更でき、一貫した日付の処理を行うことができます。年は 4 桁で指定することを推奨します。
|
6 文字データを datetime または smalldatetime 型にキャストする場合のみサポートされます。日付部分または時刻部分のみを表す文字データは、datetime または smalldatetime データ型にキャストされます。時刻部分の指定がない場合、時刻は 00:00:00:000 に設定され、日付部分の指定がない場合、日付は 1900-01-01 に設定されます。
7. タイム ゾーン インジケータ Z は省略可能です。これを使用すると、タイム ゾーン情報が含まれる XML の datetime 値から、タイム ゾーン情報が含まれない SQL Server datetime 値へのマップが容易になります。Z は、タイム ゾーン UTC-0 を示すインジケータです。他のタイム ゾーンは、+ または - の方向に HH:MM オフセットで示されます。たとえば、2006-12-12T23:45:12-08:00 のようになります。
smalldatetime 型を文字データに変換する場合、秒またはミリ秒を含むスタイルではそれらの位置に 0 が表示されます。datetime や smalldatetime 型の値を変換するときは、char や varchar 型の長さを適切に設定することにより、日付の不要な部分を切り捨てることができます。
時刻を含むスタイルを使用する文字データから datetimeoffset に変換すると、タイム ゾーン オフセットが結果に追加されます。
float 型スタイルと real 型スタイル
expression が float または real である場合、style には次の表に示すいずれかの値を指定できます。その他の値は 0 として処理されます。
|
値
|
出力
|
|---|
|
0 (既定値)
|
最高 6 桁。該当する場合は、科学的表記法で使用します。
|
|
1
|
常に 8 桁。常に科学的表記法で使用します。
|
|
2
|
常に 16 桁。常に科学的表記法で使用します。
|
|
126, 128, 129
|
レガシ システムのために含まれていますが、将来のリリースでは廃止される可能性があります。
|
money 型スタイルと smallmoney 型スタイル
expression が money または smallmoney である場合、style には次の表に示すいずれかの値を指定できます。その他の値は 0 として処理されます。
|
値
|
出力
|
|---|
|
0 (既定値)
|
小数点位置から左へ 3 桁ごとの位置にはコンマを挿入しません。また、小数点右側には 2 桁をとります。たとえば 4235.98 のようになります。
|
|
1
|
小数点位置から左へ 3 桁ごとにコンマを挿入し、小数点右側には 2 桁をとります。たとえば 3,510.92 のようになります。
|
|
2
|
小数点位置から左へ 3 桁ごとの位置にはコンマを挿入しません。また、小数点右側には 4 桁をとります。たとえば 4235.9819 のようになります。
|
|
126
|
スタイルを char(n) または varchar(n) に変換するときの style 2 に相当します。
|
xml スタイル
expression が xml である場合、style には次の表に示すいずれかの値を指定できます。その他の値は 0 として処理されます。
|
値
|
出力
|
|---|
|
0 (既定値)
|
既定の解析動作を使用します。つまり、余分な空白を破棄し、内部の DTD サブセットを許可しません。
メモ :
xml データ型への変換では、SQL Server での余分な空白は XML 1.0 とは別の方法で処理されます。詳細については、「XML インスタンスの生成」を参照してください。
|
|
1
|
余分な空白を保持します。このスタイル設定では、既定の xml:space 処理が設定され、xml:space="preserve" が代わりに指定された場合と同じ動作が行われます。
|
|
2
|
限定的な内部 DTD サブセット処理を有効にします。
有効な場合、サーバーでは内部 DTD サブセットで提供される情報を次のように使用して、検証を行わない解析操作を実行できます。
-
属性に対する既定値を適用。
-
内部エンティティ参照を解決および展開。
-
DTD コンテンツ モデルの構文の正確さを確認。
パーサーでは外部 DTD サブセットが無視されます。また、パーサーでは XML 宣言を評価して standalone 属性が yes と no のどちらであるかを確認するのではなく、XML インスタンスをスタンドアロン ドキュメントと見立てて解析します。
|
|
3
|
余分な空白を保持し、限定的な内部 DTD サブセット処理を有効にします。
|
バイナリ スタイル
expression が binary(n)、varbinary(n)、char(n)、または varchar(n) である場合、style には次の表に示すいずれかの値を指定できます。表に記載されていないスタイル値の場合は、エラーが返されます。
|
値
|
出力
|
|---|
|
0 (既定値)
|
ASCII 文字をバイナリ バイトに変換するか、バイナリ バイトを ASCII 文字に変換します。各文字またはバイトは 1:1 で変換されます。
data_type がバイナリ型である場合、文字 0x が結果の左側に追加されます。
|
|
1, 2
|
data_type がバイナリ型である場合、式は文字式であることが必要です。expression は偶数桁の 16 進数 (0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、a、b、c、d、e、f) で構成される必要があります。style が 1 に設定されている場合は、式の先頭の 2 文字を文字 0x にする必要があります。式に奇数桁の文字が含まれているか、いずれかの文字が無効な場合は、エラーが発生します。
変換された式の長さが data_type の長さよりも長い場合、結果の右側が切り捨てられます。
変換された結果よりも長い固定長の data_types の場合、結果の右側に 0 が追加されます。
data_type が文字型である場合、式はバイナリ式であることが必要です。各バイナリ文字は、16 進値を表す 2 桁の英数文字に変換されます。変換された式の長さが data_type の長さよりも長い場合は、右側が切り捨てられます。
data_type が固定サイズの文字型で、変換された結果の長さが data_type の長さよりも短い場合、変換された式の右側に空白が追加され、偶数桁の 16 進数が維持されます。
style が 1 の場合、変換された結果の左側に文字 0x が追加されます。
|
暗黙的な変換
暗黙的な変換とは、CAST または CONVERT 関数を指定せずに実行される変換のことです。一方、明示的な変換には、CAST または CONVERT 関数を指定する必要があります。次の図は、SQL Server システムで提供されるデータ型に許可されている、すべての明示的および暗黙的なデータ型変換です。これには、xml、bigint、および sql_variant 型が含まれます。代入時に sql_variant 型からの暗黙的な変換は行われませんが、sql_variant 型への暗黙的な変換は行われます。
datetimeoffset と、char、varchar、nchar、および nvarchar の各文字型との間で変換を行う場合、変換後のタイム ゾーン オフセットの部分は、-08:00 のように hh と mm の両方が常に 2 桁である必要があります。
メモ : |
|---|
Unicode データでは常に偶数のバイト数が使用されるので、binary 型または varbinary 型と、Unicode がサポートするデータ型との間でデータを変換する場合は注意してください。たとえば、SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary) という変換を行うと、16 進数の 41 ではなく、4100 が返されます。
|
大きな値のデータ型
大きな値のデータ型では、それより小さな値のデータ型、つまり varchar、nvarchar および varbinary 型と同様の明示的および暗黙的な変換動作が行われます。ただし、次のガイドラインを考慮する必要があります。
-
image 型から varbinary(max) 型への変換およびその逆の変換は暗黙的な変換であり、text 型と varchar(max) 型の間、および ntext 型と nvarchar(max) 型の間の変換も暗黙的な変換です。
-
varchar(max) 型のような大きな値のデータ型から、varchar 型のような小さな値のデータ型への変換は暗黙的な変換ですが、大きな値が、小さなデータ型で指定された長さに対して大きすぎると、切り捨てが発生します。
-
varchar、nvarchar、または varbinary 型からそれぞれ対応する大きな値のデータ型への変換は、暗黙的に実行されます。
-
sql_variant 型から大きな値のデータ型への変換は明示的な変換です。
-
大きな値のデータ型は、sql_variant 型へは変換できません。
Microsoft .NET Framework 共通言語ランタイム (CLR) ユーザー定義型の変換方法については、「ユーザー定義型に対する操作」を参照してください。xml 型からの変換方法の詳細については、「XML インスタンスの生成」を参照してください。
xml データ型
明示的か暗黙的かにかかわらず、xml データ型を文字列またはバイナリのデータ型にキャストするとき、xml データ型の内容は一連のルールに基づいてシリアル化されます。このルールの詳細については、「XML データのシリアル化」を参照してください。XML から CLR ユーザー定義型へのキャスト方法の詳細については、「ユーザー定義型に対する操作」を参照してください。他のデータ型から xml データ型への変換方法については、「XML インスタンスの生成」を参照してください。
text および image データ型
データ型の自動変換は、text 型および image 型ではサポートされません。text データは文字データに、image データは binary または varbinary 型に明示的に変換できますが、最大の長さは 8,000 バイトに制限されます。文字を含む文字式を int 型に変換するなど、不適切な変換が試行された場合、SQL Server ではエラー メッセージが返されます。
出力の照合順序
CAST または CONVERT の入出力が文字列である場合、出力では入力と同じ照合順序および照合順序ラベルが使用されます。入力が文字列ではない場合、出力ではデータベースの既定の照合順序、および強制可能な既定照合順序の照合順序ラベルが使用されます。詳細については、「照合順序の優先順位 (Transact-SQL)」を参照してください。
出力に別の照合順序を割り当てるには、CAST 関数または CONVERT 関数の結果式に COLLATE 句を適用します。次に例を示します。
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
切り捨てと丸め処理の結果
char、nchar、nvarchar、varchar、binary、varbinary 型などの文字式やバイナリ式を異なるデータ型に変換する場合は、データを切り捨てて一部分だけが表示されることがあります。または、結果が短すぎて表示できないというエラーが返されます。char、varchar、nchar、nvarchar、binary、および varbinary 型への変換では、次の表に示す変換を除き、切り捨てが行われます。
|
変換前のデータ型
|
変換後のデータ型
|
結果
|
|---|
|
int、smallint、または tinyint
|
char
|
*
|
|
|
varchar
|
*
|
|
|
nchar
|
E
|
|
|
nvarchar
|
E
|
|
money、smallmoney、numeric、decimal、float、または real
|
char
|
E
|
|
|
varchar
|
E
|
|
|
nchar
|
E
|
|
|
nvarchar
|
E
|
* = 結果が短すぎて表示できない。E = 結果が短すぎて表示できない場合エラーが返される。
SQL Server では、元のデータから別のデータ型に変換し、再度元のデータ型に戻すラウンド トリップ変換の場合にだけ、異なるバージョンでも同じ結果が生成されることが保証されています。次にラウンド トリップ変換の例を示します。
DECLARE @myval decimal (5, 2)
SET @myval = 193.57
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5))
-- Or, using CONVERT
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))
メモ : |
|---|
|
binary 型の値を作成し、これを数値データ型に変換することは避けてください。SQL Server では、decimal または numeric 型の binary 型への変換結果が SQL Server のバージョン間で同じになることは保証されていません。
|
次の例では、短すぎて表示できない結果式を示します。
USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName, SUBSTRING(c.Title, 1, 25) AS Title, CAST(e.SickLeaveHours AS char(1)) AS 'Sick Leave'
FROM HumanResources.Employee e JOIN Person.Contact c ON e.EmployeeID = c. ContactID
WHERE NOT EmployeeID >5
以下に結果セットを示します。
FirstName LastName Title Sick Leave
--------- --------- ------------------- -----------
Gustavo Achong Mr. *
Catherine Abel Ms. *
Kim Abercrombie Ms. *
Humberto Acevedo Sr. *
Pilar Ackerman Sra. *
(5 row(s) affected)
小数点の位置が異なるデータ型を変換すると、場合によって結果の値が切り捨てられるか丸められます。次の表はその動作です。
|
変換前
|
変換後
|
動作
|
|---|
|
numeric
|
numeric
|
丸め処理
|
|
numeric
|
int
|
切り捨て
|
|
numeric
|
money
|
丸め処理
|
|
money
|
int
|
丸め処理
|
|
money
|
numeric
|
丸め処理
|
|
float
|
int
|
切り捨て
|
|
float
|
numeric
|
丸め処理
|
|
float
|
datetime
|
丸め処理
|
|
datetime
|
int
|
丸め処理
|
たとえば、次の変換の結果は 10 です。
SELECT CAST(10.6496 AS int)
変換後のデータ型の小数点以下桁数が変換前のデータ型の小数点以下桁数より少ない場合は、値が丸められます。たとえば、次の変換の結果は $10.3497 です。
SELECT CAST(10.3496847 AS money)
数値ではない char、nchar、varchar、または nvarchar 型のデータが int、float、numeric、または decimal 型に変換されるとき、SQL Server ではエラー メッセージが返されます。SQL Server では、空文字列 (" ") が numeric または decimal 型に変換されるときにもエラーが返されます。
SQL Server 2005 以降のバージョンでは一部の datetime 変換が非決定的
SQL Server 2000 では、文字列から日付と時刻への変換は "決定的" とマークされます。ただし、これは次の表に示すスタイルに対しては当てはまりません。これらのスタイルの場合、その変換は言語の設定に依存します。SQL Server 2005 以降のバージョンでは、これらの変換が "非決定的" とマークされます。
次の表は、文字列から datetime への変換が非決定的であるスタイルを示します。
|
100 未満のすべてのスタイル1
|
106
|
|
107
|
109
|
|
113
|
130
|
1 スタイル 20 と 21 を除く