3

MSSQL 2005 で次のことを試してください。

select convert(char(2), 123)

ここで重要なのは、char(2) が小さすぎて値「123」を受け入れることができないということです。ここで切り捨てエラーが発生すると予想されますが、代わりに値「*」が返されます。

更新: いくつかの回答は、エラーを引き起こす方法でキャストする方法を示しました。それは私が本当に必要としているものではありません。以前は char(2) と宣言されていたが、その後 int に変更された特定のフィールドを使用する多くのコードがあります。ここでの私の目標は、変換されていないコードが処理できないデータに遭遇した場合に失敗することを確認することです。だから、私たちはそれを修正することができます.

興味深いことに、dsolimanoは、上記の型を nchar に変更すると予想されるエラーが発生することを指摘し、Justin Niessnerは、これらは両方とも設計によるものであると指摘しています。nchar が Unicode サポート用であることを考えると、奇妙な矛盾ですね。

ここにある回答から、悲しいことにサーバーに既存のコードのエラーをスローさせることができないようです。

4

5 に答える 5

3

Microsoft の変換/キャスト ページは、または切り捨ての代わりにエラーを取得したい場合は nchar(2) にキャストできることを示しているようです。*実際、それは私が得たものです:

SELECT CAST(123 AS NCHAR(2))

Msg 8115, Level 16, State 2, Line 3
Arithmetic overflow error converting expression to data type nvarchar.
于 2010-06-30T13:42:17.820 に答える
1

次の MSDN ページを下にスクロールします。

CAST と CONVERT (Transact-SQL)

結果の切り捨てと丸めの見出しにたどり着くまで

表示されている動作が定義済みの動作であることがわかります。

数字の 2 桁のみを取得するように切り捨てを行う場合は、次の方法を試してください。

select cast(convert(varchar(10), 123) as char(2))
于 2010-06-30T13:39:10.603 に答える
0

小さすぎる文字列にキャストする前に、可変長文字列にキャストするだけです。

Select Cast( Cast( 123 as varchar(10) ) As char(2) )
于 2010-06-30T13:38:09.653 に答える
0

SQL Server は問題なく文字列を切り捨てます。したがって、値を最初に変換してから、varchar次のようにキャストできchar(2)ます。

select convert(char(2), cast(123 as varchar(128))
于 2010-06-30T13:38:35.427 に答える
0

これが起こるのを「防ぐ」とはどういう意味ですか?代わりに何をしたいですか?何もない?

DECLARE @number INT
SET @number = 123

IF(@number < 100) SELECT CONVERT(char(2), @number)
于 2010-06-30T13:40:26.063 に答える