-1

それは私だけかもしれませんが...ほとんどのSQL開発者はキャストと変換を非常に基本的なものと見なしているという事実にもかかわらず、それは本当かもしれませんが、CASTとCONVERTに関するMicrosoftのドキュメントページは最も恐ろしいものの1つです、直感的にレイアウトされていない、今まで見たものを理解するのが難しい。彼らのドキュメントの多くは素晴らしいです。ページ全体をキャストと変換の両方の組み合わせに常にブレンドしようとするように、各文を前後にジャンプします...それらを個別に処理するのではなく. そして、target_type を最初の引数として指定するのは誰ですか? 式を最初の引数として配置すると、より直感的になり、多数のプログラミング言語の構文の他の 99% に従います。うーん

MSは、私が3つのデータ型にしか変換できないと言います:(実際には、これがCASTとCONVERTの両方に当てはまるかどうかはよくわかりません。それは明らかに両方に等しく適用されます-私がはるかに頻繁に使用するCASTには当てはまらないという事実をすでに知っていますが)。

「対象のデータ型です。これには、xml、bigint、および sql_variant が含まれます」

しばらくの間、他の多くのデータ型 (date、varchar) と同じように CAST を実行するという事実は脇に置いておいて、

私の当面の質問は、これらのデータ型にしか変換できない場合、なぜこれが機能するのですか?

select CONVERT(varchar(200), cast(50 as smallint))

INSERT最後に、 を取得して列 smallintに入れるan を実行したいと思います。varchar(200)

私がやろうとしているのは失敗を避けることだけなので、に変換したりキャストしたりする必要はないかもしれませんがvarchar

  1. CONVERTドキュメントに関する私の明らかな誤解について答えてください

また

  1. 安全に変換して挿入する方法varchar

大歓迎です。過度に不愉快でない限り、MS のすべての批評で襟の下で熱くなる MS ファンが常にいるので.. :|

4

2 に答える 2

2

はい、 smallintからvarcharに変換できます。

1) CONVERT ドキュメントに関する私の明らかな誤解についての回答

これは、データ型とは何か、データ型をある型から別の型に変換する方法、そして同様に重要なことについての一般的な理解が不足している結果かもしれません。データ型の美的表現に関して言えば、スタイルとは何ですか。

CAST は、スタイル オプションのない明示的なキャスト操作です。CONVERT は、出力のスタイルを指定できる明示的なキャストでもあります。

ドキュメントには次のように明確に記載されています。

暗黙の変換

暗黙的な変換は、CAST 関数または CONVERT 関数を指定せずに発生する変換です。明示的な変換は、CAST または CONVERT 関数を指定する必要がある変換です。次の図は、SQL Server システム提供のデータ型に対して許可されているすべての明示的および暗黙的なデータ型変換を示しています。これらには、xml、bigint、および sql_variant が含まれます。sql_variant データ型からの割り当てには暗黙的な変換はありませんが、sql_variant への暗黙的な変換はあります。

2 番目の質問について

2) 安全に変換して varchar に挿入する方法

安全とは何を意味するかによって異なります。varchar への変換は、成功する可能性が最も高い変換です。しかし、任意のデータ型にキャストするときはいつでも、本質的にデータの性質そのものを変更しており、より小さな型にキャスト (またはスタイルを適用) すると精度が失われます。

ドキュメントには次のように明確に記載されています。

結果の切り捨てと丸め

文字式またはバイナリ式 (char、nchar、nvarchar、varchar、binary、または varbinary) を別のデータ型の式に変換すると、データが切り捨てられたり、部分的にしか表示されなかったり、結果が短すぎるためにエラーが返されたりする可能性があります。表示する。次の表に示す変換を除き、char、varchar、nchar、nvarchar、binary、および varbinary への変換は切り捨てられます。

つまり、キャストは決して安全ではありません。

于 2016-04-21T17:13:07.063 に答える