1

SQL変換について助けが必要です。私が提供されたクエリのこの部分:

'$' + replace(cast((CAST(p.Price1 AS decimal(10,2)) * cast(isnull(p.Multiplier,1) as decimal(10,2))) as varchar), '.0000', '')

基本的に、次のような varchar になります。$26980

千と百万のマークにコンマを挿入する必要があります (該当する場合)。したがって、この例では、$26,980

全体を書き直さずにそれを行う最も簡単な方法は何ですか?

4

3 に答える 3

1

本当にTSQLでそれを行う必要がある場合は、を使用できますCONVERT()が、この種のものは実際にはデータベースに属していません:

declare @m money = 12345678
-- with decimal places
select '$' + convert(varchar, @m, 1)
-- without decimal places
select '$' + replace(convert(varchar, @m, 1), '.00', '')
于 2012-11-15T22:24:05.320 に答える
1

クライアント側で行います。そうは言っても、この例はあなたに道を示すはずです。

with p(price1, multiplier) as (select 1234.5, 10)
select '$' + replace(cast((CAST(p.Price1 AS decimal(10,2)) * cast(isnull(p.Multiplier,1) as decimal(10,2))) as varchar), '.0000', ''),
       '$' + parsename(convert(varchar,cast(p.price1*isnull(p.Multiplier,1) as money),1),2)
from p

鍵は最後の式にあります

'$' + parsename(convert(varchar,cast(p.price1*isnull(p.Multiplier,1) as money),1),2)

注:p.price1が decimal(10,2) よりも高い精度である場合は、オリジナルCAST(p.Priced1 as decimal(10,2))が丸めを実行するため、忠実な変換を生成するためにも式にキャストする必要がある場合があります。

于 2012-11-16T00:40:17.657 に答える
0

これを関数に変えることができます.50文字しか戻りません.

DECLARE @input VARCHAR(50)
SELECT @input = '123123123.00'
SELECT @input = CASE WHEN CHARINDEX('.', @input) > offset +1
                      THEN STUFF(@input, CHARINDEX('.', @input) - offset, 0, ',') 
                      ELSE @input END
FROM (SELECT 3 offset UNION SELECT 7 UNION SELECT 12 UNION SELECT 18 UNION SELECT 25 UNION SELECT 33 UNION SELECT 42) b
PRINT @input

前の位置のコンマを既に挿入していると想定しているため、オフセットは位置ごとに +1 ずつ大きくなります。

于 2012-11-15T22:31:59.580 に答える