SQLのキャストと変換の使用法の詳細な説明

高洛峰
リリース: 2016-12-14 13:26:44
オリジナル
1894 人が閲覧しました

SQLのキャストと変換の使用法の詳細な説明

概要:

以下はmysqlにのみ適用されます

SELECT {fn CONCAT(CONVERT(user_id,CHAR),USER_NAME)} AS str FROM t_sys_user

以下はsqlserver2008 のみに適用

SELECT {fn CONCAT(CONVERT(CHAR, user_id),USER_NAME)} AS str FROM t_sys_user

次の SQLserver は mysql と互換性があります

SELECT {fn CONCAT(CAST(user_id AS CHAR),USER_NAME)注: Cast は、sqlserver と mysql に共通の型変換関数です。 ○ Convert も SQLServer2008 と MySQL に存在する型変換ですが、パラメータの順序が逆です。 SQLServer2008やMySQLではConcat関数が利用可能ですが、SQLServer2008では {Fn Concat (ARG0, ARG1, ...)} を適用する必要があり、INT型やVarchar型への接続には適用できません。 sqlserver2008 では、文字列接続には通常「+」記号が使用されます。ただし、sqlserver2012ではconcat関数の直接使用がサポートされているようです。

mysql が変換できる型の制限:

は、CAST (xxx AS type)、CONVERT (xxx, type) です。

変換できる種類は限られています。この型は、次の値のいずれかになります:

Binary、バイナリ接頭辞の効果: BINARY

文字型、パラメータを取ることができます: CHAR()

Date: DATE

Time: TIME

Date time 型: DATETIME

浮動小数点数: DECIMAL

整数: SIGNED

符号なし整数: UNSIGNED

以下の部分は転載、上の部分は自分でまとめたものです。

sqlserver

あるデータ型の式を別のデータ型に明示的に変換します。 CAST と CONVERT は同様の機能を提供します。

構文

CASTの使用:

CAST (expression AS data_type)

CONVERTの使用:

CONVERT (data_type[(length)],expression[,style])

パラメータ

expression

は任意の有効なMicrosoft ® SQL Server™ 式。詳細については、「式」を参照してください。

data_type

ターゲット システムによって提供されるデータ型 (bigint や sql_variant など)。ユーザー定義のデータ型は使用できません。使用可能なデータ型の詳細については、「データ型」を参照してください。

length

nchar、nvarchar、char、varchar、binary、または varbinary データ型のオプションの引数。

style

datetime または smalldatetime データを文字データ (nchar、nvarchar、char、varchar、nchar、または nvarchar データ型) に変換する日付書式設定スタイル、または float、real、money、または smallmoney データを変換する文字列書式設定スタイル。文字データ (nchar、nvarchar、char、varchar、nchar、または nvarchar データ型) に変換されます。

SQL Server は、クウェートのアルゴリズムを使用したアラビア形式のデータ形式をサポートしています。

表の左側の 2 つの列は、datetime または smalldatetime を文字データに変換するスタイル値を表します。スタイル値に 100 を加算すると、世紀の桁を含む 4 桁の年 (yyyy) が得られます。

世紀桁なし (yy) 世紀桁あり (yyyy)

標準

入出力**

- 0 または 100 (*) デフォルト値 mon dd yyyy hh:miAM (または PM)

1 101 United州 mm/dd/yyyy

2 102 ANSI yy.mm.dd

3 103 イギリス/フランス dd/mm/yy

4 104 ドイツ dd.mm.yy

5 105 イタリア dd-mm-yy

6 106 - dd mon yy

7 107 - mon dd, yy

8 108 - hh:mm:ss

- 9 または 109 (*) デフォルト値 + ミリ秒 mon dd yyyy hh:mi:ss:mmmAM (または PM)

10 110 米国 mm-dd-yy

11 111 日本 yy/mm/dd

12 112 ISO yymmdd

- 13 または 113 (*) ヨーロッパのデフォルト + ミリ秒 dd mon yyyy hh:mm:ss :mmm(24h)

14 114 - hh:mi:ss:mmm(24h)

- 20 または 120 (*) ODBC 仕様 yyyy-mm-dd hh:mm:ss[.fff]

- 21 または121 (*) ODBC 仕様 (ミリ秒付き) yyyy-mm-dd hh:mm:ss[.fff]

- 126 (***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm (スペースなし)

- 130* クウェート dd mon yyyy hh:mi:ss:mmmAM

- 131* クウェート

デフォルト値 (スタイル 0 または 100、9 または 109、13 または 113、20 または 120、21 または 121) 常に返されます世紀の数字 (yyyy)。

** 日付時刻に変換された場合は入力、文字データに変換された場合は出力。

*** 特に XML の場合。 datetime または smalldatetime から文字データへの変換の場合、出力形式は表に示すとおりです。 float、money、または smallmoney から文字データへの変換の場合、出力はスタイル 2 と同等になります。実数データから文字データへの変換の場合、出力はスタイル 1 と同等になります。

重要 デフォルトでは、SQL Server は 2049 年を基準として 2 桁の年を解釈します。つまり、2 桁の西暦 49 は 2049 として解釈され、2 桁の西暦 50 は 1950 として解釈されます。 OLE オートメーション オブジェクトに基づくクライアント アプリケーションなど、多くのクライアント アプリケーションでは、2030 年を終了年として使用します。 SQL Server には、SQL Server で使用される終了年を変更し、日付を一貫して扱うことができる構成オプション (「2 桁の終了年」) が用意されています。ただし、最も安全な方法は、4 桁の年を指定することです。

smalldatetime から文字データに変換する場合、秒またはミリ秒を含むスタイルでは、これらの位置にゼロが表示されます。 datetime または smalldatetime 値から変換する場合、適切な char または varchar データ型の長さを使用して、不要な日付部分を切り捨てることができます。

以下の表は、floatまたはrealから文字データに変換するときのスタイル値を示しています。

値の出力

0 (デフォルト) 最大 6 桁。必要に応じて科学的表記法を使用してください。

1 は常に 8 ビット値です。常に科学的表記法を使用してください。

2 は常に 16 ビット値です。常に科学的表記法を使用してください。

以下の表の左の列は、money または smallmoney から文字データに変換するときのスタイル値を表します。

値の出力

0 (デフォルト値) 小数点の左側の各 3 桁はカンマで区切られず、小数点の右側の 2 桁が取得されます (例: 4235.98)。

1 小数点の左側の 3 桁ごとにカンマで区切って、小数点の右側の 2 桁を取得します (例: 3,510.92)。

2 小数点の左側の各 3 桁の数値はカンマで区切られず、小数点の右側の 4 桁が取得されます (例: 4235.9819)。

戻り値の型

データ型 0 と同じ値を返します。

注意事項

暗黙的な変換とは、CAST 関数または CONVERT 関数を指定しない変換を指します。一方、明示的な変換は、必要な CAST (CONVERT) 関数が指定されている変換です。次の表は、bigint や sql_variant など、SQL Server システムによって提供されるデータ型で使用できる明示的および暗黙的な変換をすべて示しています。

説明 Unicode データは常に偶数のバイトを使用するため、binary または varbinary データ型と Unicode でサポートされるデータ型の間で変換するときにヒントが使用されます。たとえば、この変換では 16 進値 41 を返す代わりに、16 進値 4100 を返します。 SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary)

テキスト データ型とイメージ データ型の自動変換はサポートされていません データ型変換。テキスト データを文字データに、イメージ データをバイナリまたは varbinary データに明示的に変換できますが、最大長は 8000 です。不正な変換が試行された場合 (たとえば、文字を含む文字式が int に変換された場合)、SQL Server はエラー メッセージを生成します。

CAST または CONVERT の出力が文字列であり、入力も文字列である場合、出力には入力と同じ照合順序および照合ラベルが付けられます。入力が文字列でない場合、出力ではデータベースのデフォルトの照合順序と必須のデフォルトの照合順序ラベルが使用されます。詳細については、「照合順序の優先順位」を参照してください。

出力に別の照合順序を割り当てるには、CAST 関数または CONVERT 関数の結果式に COLLATE 句を適用します。例:

SELECT CAST(''abc'' AS varchar(5)) COLLATE French_CS_AS

代入に関して sql_variant データ型からの暗黙的な変換はありませんが、sql_variant への暗黙的な変換はあります。

文字またはバイナリ式 (char、nchar、nvarchar、varchar、binary、または varbinary) を別のデータ型の式に変換すると、結果が短すぎるためにデータが切り捨てられたり、部分的にのみ表示されたり、返されたりすることがあります。表示ミス。次の表に示す変換に加えて、char、varchar、nchar、nvarchar、binary、および varbinary への変換も切り捨てられます。

varchar *

nchar E

nvarchar E

money、smallmoney、数値、10 進数、float または real char E

varchar E

nchar E

nvarchar E

*結果の長さが短すぎます見せるために。

E 結果の長さが短すぎて表示できないため、エラーが返されます。

Microsoft SQL Server は、往復変換 (つまり、元のデータ型との間の変換) がバージョン間で同じ値を生成することのみを保証します。次の例は、ラウンドトリップ変換を示しています。

DECLARE @myval 10 進数 (5, 2)SET @myval = 193.57SELECT CAST(CAST(@myval AS varbinary(20)) AS 10,5))-- Or 、CONVERTSELECT CONVERT(decmal(10,5), CONVERT(varbinary(20), @myval)) を使用します

たとえば、バイナリ値を構築して、それらを数値データ型として分類されるデータ型に変換しようとしないでください。 SQL Server は、10 進数または数値データ型をバイナリに変換した結果が SQL Server のバージョン間で同じであることを保証しません。

以下の例は、表示するには短すぎる結果の式を示しています。

USE pubsSELECT SUBSTRING(title, 1, 25) AS Title, CAST(ytd_sales AS char(2))FROM titleWHERE type = ''trad_cook''

結果セットは次のとおりです:

Title ------ ------------ -- 玉ねぎ、ネギ、ニンニク * バッキンガムでの 50 年 * 寿司、誰か? * (3 行が影響を受けます)

小数点以下が異なる場合 データに変換する場合桁数を含むタイプの場合、値は最も近い桁に切り捨てられます。たとえば、SELECT CAST(10.6496 AS int) は 10 を返します。

変換の際、変換先のデータ型の小数点以下の桁数が変換元のデータ型の小数点以下の桁数より小さい場合、変換後の値は四捨五入されます。たとえば、CAST(10.3496847 AS マネー) の結果は $10.3497 です。

SQL Server は、非数値型の char、nchar、varchar、または nvarchar データを int、float、numeric、または 10 進数に変換するときにエラー メッセージを返します。 SQL Server は、空の文字列 (" ") を数値または 10 進数に変換するときにもエラー メッセージを返します。

バイナリ文字列データの使用

バイナリまたは可変バイナリ データが文字データに変換され、x の後に奇数桁の値が指定された場合、SQL Server は x の後に 0 (ゼロ) を追加して偶数桁の値にします。

バイナリ データには、0 ~ 9 と A ~ F (または a ~ f) の文字が 2 つの文字のグループとして含まれます。バイナリ文字列は 0x で始まる必要があります。たとえば、「FF」を入力するには、「0xFF」と入力します。最大値は 8000 バイトのバイナリ値で、各バイトの最大値は FF です。バイナリ データ型は 16 進データには使用できませんが、ビット パターンには使用できます。バイナリデータとして格納された16進数の変換および計算結果の精度は保証できません。

バイナリデータ型の長さを指定する場合、2文字ごとに1単位の長さとカウントされます。長さ 10 は、10 個のバイグラムが入力されることを意味します。

0xで表される空のバイナリ文字列はバイナリデータとして保存できます。

A. CAST と CONVERT の両方を使用する

各例では、本のタイトル (これらの本の現在の売上の最初の桁は 3) を取得し、これらの本の ytd_sales を char(20 ) に変換します。

-- CAST.USE pubsGOSELECT SUBSTRING(title, 1, 30) AS Title, ytd_salesFROM titleWHERE CAST(ytd_sales AS char(20)) LIKE ''3%''GO を使用 -- CONVERT.USE pubsGOSELECT SUBSTRING(title, 1, 30) AS Title, ytd_salesFROM titleWHERE CONVERT(char(20), ytd_sales) LIKE ''3%''GO

以下はクエリの結果セットです:

Title ytd_sales -------- - ---------------------------- ---------- コンピューターを使った料理: Surrep 3876 コンピューター恐怖症と非恐怖症 375 心の安全性: 新しいアルゴ 3336 タマネギ、ネギ、ニンニク: Coo 375 (4 行が影響を受けます)

B. 算術演算子で CAST を使用する

次の例では、本の価格をそれぞれ除算して現在の売上 (ytd_sales) と合計を比較します。 (価格) を選択し、別の列の計算 (コピー数) を実行します。この結果は、最も近い整数に四捨五入された後、int データ型に変換されます。

USE pubsGOSELECT CAST(ROUND(ytd_sales/price, 0) AS int) AS ''Copies''FROM titleGO

以下は結果セットです:

Copies 324 6262 205 102 7440 NULL 383 205 NULL 17 187 16 204 418 18 1263 273 (18 行が影響を受けます)

C CAST を使用した連結

次の例では、CAST データ型変換関数を使用して非文字、非バイナリ式を連結します。 。

pubsGOSELECT ''価格は '' + CAST(price AS varchar(12))FROM titleWHERE 価格 > 10.00GO を使用します

以下は結果セットです:

----------- --------------- ----- 価格は 19.99 価格は 11.95 価格は 19.99 価格は 22.95 価格は 20.00 価格は 21.59 は 10.95 価格は 19.99価格は 20.95 価格は 11.95 価格は 14.99 (12 行が影響を受けます)

D より読みやすいテキストを取得するには CAST を使用します

以下の例では、選択リストで CAST を使用して、タイトル列を char(50) 列に変換し、結果を読みやすくしています。

USE pubsGOSELECT CAST(title AS char(50)), ytd_salesFROM titleWHERE type = ''trad_cook''GO

結果セットは次のとおりです: ytd_sales---------------- -------------------------------------- 玉ねぎ、ネギ、ニンニク: バッキンガム宮殿のキッチン 15096 の 37550 年の料理の秘密 4095 (3 行が影響を受けました)

E. LIKE 句で CAST を使用します

次の例では、int 列 (ytd_sales 列) を char (20) に変換します。 LIKE 句を使用する列。

USE pubsGOSELECT title,

-

ytd_salesFROM titleWHERE CAST(ytd_sales AS char(20)) LIKE ''15%'' AND type = ''trad_cook''GO

以下は結果セットです:

タイトル ytd_sales ----------------------------------------------- -- -----------

Mysql:

MySQL の CAST() 関数と CONVERT() 関数を使用して、ある型の値を取得し、別の型の値を生成できます。 2 つの具体的な構文は次のとおりです:

1 CAST (型としての値);

2 CONVERT (値、型);

は CAST (xxx AS 型)、CONVERT (xxx、型) です。

変換できる種類は限られています。この型は、次の値のいずれかになります:

Binary、バイナリ接頭辞の効果: BINARY

文字型、パラメータを取ることができます: CHAR()

Date: DATE

Time: TIME

Date time 型: DATETIME

浮動小数点数: DECIMAL

整数: SIGNED

符号なし整数: UNSIGNED

いくつかの例を示します:

例 1

1 mysql> SELECTCONVERT('23',SIGNED );

2 +- ----------+

3 | CONVERT('23',SIGNED) |

4 +---------- - --------+

5 | 23 |

6 +----------+

7 1行インセット

例 2

1 mysql> SELECTCAST('125e342.83'ASsigned);

2 +-------------------------- --- -+

3 | CAST('125e342.83'割り当て済み) |

4 +-------------------------- ---+

5 |

6 +--------------------------------+

7 1 行挿入

例 3

1 mysql> SELECTCAST('3.35'ASsigned);

2 +----------------------+

3 | ('3.35'割り当て済み) |

4 +------------------------+

5 | -------------+

7 1行挿入

上記の例と同様に、cast(a as signed)を使用してvarcharをintに変換します。ここで、aはvarchar型の文字列です。

例 4

SQL Server で、次のコードは、datetime 変数に単純な日付と単純な時刻のみが含まれる場合の、日付格納の 16 進格納結果を示します。

01 DECLARE @dt datetime

02

03 -- 単純な日付

04 SET @dt='1900-1-2'

05 SELECT CAST(@dt asbinary(8))

06 -- 結果: 0x0000000100000000

07

08 --単純な時間

09 SET @dt='00:00:01'

10 SELECT CAST(@dt asbinary(8))

11 --結果: 0x0000000000 00012C

MySQL の型変換は SQL Server の型変換と同じですが、型パラメータが少し異なります: CAST(xxx AS type)、CONVERT(xxx, type)。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート