web-dev-qa-db-ja.com

フロートをnvarcharにキャストまたは変換しますか?

データ型floatの1つの列から選択し、nvarcharとして別の列に挿入する必要があります。

キャストしようとしました:cast([Column_Name] as nvarchar(50))

結果は9.07235e+009の代わりに10桁の番号(電話番号)。

このデータを適切にキャストまたは変換する方法を知っている人はいますか?

24
Eugene

[〜#〜] str [〜#〜] を確認してください。 SELECT STR([Column_Name],10,0)のようなものが必要です**これはSQL Serverソリューションです。他のサーバーのドキュメントを確認してください。

32
a1ex07

Float型の列に電話番号を格納する場合(これは悪い考えです)、おそらくすべて整数であり、nvarcharにキャストする前にintにキャストできます。

代わりに:

_select cast(cast(1234567890 as float) as nvarchar(50))
1.23457e+009
_

次を使用します。

_select cast(cast(cast(1234567890 as float) as int) as nvarchar(50))
1234567890
_

これらの例では、適切な列から値を選択する代わりに、最も内側のcast(1234567890 as float)が使用されます。

私は本当にお勧めしますあなたは電話番号をフロートに保存しないことを!
電話番号がゼロで始まる場合はどうなりますか?

_select cast(0100884555 as float)
100884555
_

おっと!間違った電話番号を保存しました...

15
Coxy

しない浮動小数点を使用して、精度が必要な固定小数点データを保存します。この例は、floatをNVARCHAR(50)に適切に変換する方法を示し、精度データにfloatを使用するのが悪い考えである理由も示しています。

create table #f ([Column_Name] float)
insert #f select 9072351234
insert #f select 907235123400000000000

select
    cast([Column_Name] as nvarchar(50)),
    --cast([Column_Name] as int), Arithmetic overflow
    --cast([Column_Name] as bigint), Arithmetic overflow
    CAST(LTRIM(STR([Column_Name],50)) AS NVARCHAR(50))
from #f

出力

9.07235e+009    9072351234
9.07235e+020    907235123400000010000

テーブルに保存しようとしたデータが「00000」で終わっていても、2番目の出力が「10000」で終わることに気付くかもしれません。 floatデータ型には、サポートされている有効数字の固定数があり、これまで拡張されていないためです。

9
RichardTheKiwi

FloatはNVARCHARに直接変換されません。最初にfloatをmoneyデータ型に変換してから、NVARCHARに変換する必要があります。以下の例を参照してください。

例1

SELECT CAST(CAST(1234567890.1234  AS FLOAT) AS NVARCHAR(100))

出力

1.23457e+009

例2

SELECT CAST(CAST(CAST(1234567890.1234  AS FLOAT) AS MONEY) AS NVARCHAR(100))

出力

1234567890.12

Example2では、値はfloatからNVARCHARに変換されます

1