1

データベースに価格を含む列があり、として保存されていvarchar(10)ます。引き出す必要のあるフォーマットは、コンマがありますが、小数はありません。したがって、価格がの場合、1500.00121カンマはそのままで「1,500」と表示されます。これが私がこれまでに持っているものです:

CONVERT(varchar, CAST(p.Price1 AS money), 1)

これにはまだ小数点以下の桁があり".xx"ます。カンマを保持したまま、10進数と末尾の数字を削除するにはどうすればよいですか?

4

3 に答える 3

2

Decimal(10,2)データ型に格納しないのはなぜですか? VARCHAR別のデータ型への余分なキャストがないため、格納するよりもはるかに優れています。

CAST次のROUND機能を使用できます。

SELECT ROUND(CAST('1500.00121' AS DECIMAL(10,4)), 0, 1)

それでおしまい。このCAST関数は、データ型を別のデータ型に変換します。このROUND関数は、指定された長さまたは精度に丸められた数値を返します。

の元の構文ROUNDは次のとおりです。

ROUND ( numeric_expression , length [ ,function ] )

パラメータFunctionは、実行する操作のタイプです。tinyintsmallint、またはintFunctionでなければなりません。function が省略されているか、値が0 (デフォルト) の場合、numeric_expression は rounded になります。0 以外の値が指定された場合、numeric_expression は切り捨てられます。

SQLFiddle デモ

ラウンド (MSDN)

10 進数 (MSDN)

于 2012-08-27T00:40:14.857 に答える
0

うまくいくことを願っています

declare @q money = 1500.123

select parsename(convert(varchar,convert(money,@q), 1),2)
于 2012-08-27T00:19:09.317 に答える
0

手元にSQLサーバーはありませんが、

Declare @correctlyTyped Money

Set @correctlyTyped = Convert(Money, SomeBadlyTypedField)

Select 
  Substring(@correctlyTyped,0,DataLength(@correctlyTyped) - CharIndex('.',@correctlyTyped ))

それをお金に換算して、小数点以下をすべて選択します。

これは、データのロケール/照合に依存していることに注意してください。たとえばヨーロッパ本土では、, が小数点記号で、. 千区切り記号です。

于 2012-08-27T00:40:12.813 に答える