4

タイプが decimal(18,6) である Amount という 1 つのデータベース テーブル フィールドがあります。したがって、9.786534 のように小数点以下 6 桁までデータベースに格納されますが、select クエリを使用してそのフィールドを取得するときは、次のように注意する必要があります

  1. 試用ゼロを削除します。たとえば、数値が 9.230000 の場合、結果は 9.23 のみです。
  2. 小数点がすべてゼロの場合は、4 つのゼロのみを削除します。たとえば、数値が 9.000000 の場合、結果は 9.00 です。

  3. 試行ゼロがある場合、結果は小数点以下 2 桁までです。

次のような簡単なクエリを書くと

EmployeeMaster から上位 1 件の金額を選択

次に、9.230000を返します

しかし、私の意図は末尾のゼロを削除することです..

私を助けてください..

4

8 に答える 8

1

これはうまくいくはずです

SELECT CAST(REPLACE(RTRIM(REPLACE(CAST(CAST(33.9082976 AS DECIMAL(38,8)) AS NVARCHAR(256)),'0',' ')),' ','0') AS FLOAT)
于 2016-11-02T11:29:12.567 に答える
1

9末尾のゼロを削除するために機能しますが9.00、この方法ではまだ変換できません。

Declare @myvalue varchar(50), 
        @Price Varchar(50) 

Set @Price = '9.230000' 

set @Myvalue = reverse(substring(@Price,patindex('%.%',@Price)+1,len(@Price))) 


SELECT 
case  
When  patindex('%.%[1-9]%',@price) = 0 Then  
    substring(@price,1,patindex('%.%',@price)-1) 
else 
    substring(@price,1,patindex('%.%',@price)-1) + '.' +  Reverse(substring(@Myvalue,patindex('%[1-9]%',@Myvalue),len(@Myvalue))) 
END 
于 2012-04-27T05:36:40.077 に答える
1

decimal(18,6) から来ることができます...

select cast(Amount as decimal(18,2))

CAST 関数をサポートするほとんどのデータベースは、変換中に数値を丸めます。SQLServer では、丸めが必要な場合にこれを行います。

実際に必要なのは、小数点以下2桁の文字列である場合は、次のことができます

select cast((Amount as decimal(18,2)) as nvarchar)

nvarchar は、SQLServer の可変長 Unicode 型です。データベースは、文字列型についてあまり一致していません。データベースには別のデータベースがある場合があります。SQL の残りの部分は ANSI 標準です。すべてのデータベースがサポートしているわけではありませんが、多くのデータベースがサポートしています。

于 2012-04-27T05:53:09.013 に答える
0

これは機能しますか?

select TOP 1 ROUND(Amount, 2) From EmployeeMaster 
于 2012-04-27T05:08:45.247 に答える
0

以下のコードを試してください。

SELECT TOP 1 CONVERT(DECIMAL(10,2),Amount) From EmployeeMaster 

期待どおりに動作することを願っています。

于 2012-04-27T05:14:03.093 に答える
0

別のアプローチ:

1) 10 進数を文字列に変換します。

2) 文字列を 2 つの部分に分割し、最後の 4 文字を残りの文字列から分離します。

3) 最後の 4 文字から末尾のゼロを削除します。

4) 2 つの部分を連結して戻します。

WITH data (V)     AS (SELECT CAST(9.786534 AS decimal(18,6))
                      UNION ALL
                      SELECT CAST(9.78653  AS decimal(18,6))
                      UNION ALL
                      SELECT CAST(9.7800   AS decimal(18,6))
                      UNION ALL
                      SELECT CAST(9.7      AS decimal(18,6))
                      UNION ALL
                      SELECT CAST(9.00000  AS decimal(18,6))
                     )

,    AsString (V) AS (SELECT CAST(V AS varchar) FROM data)

,    Split (L, R) AS (SELECT LEFT(V, LEN(V) - 4), RIGHT(V, 4) FROM AsString)

,    Adjusted     AS (SELECT L,
                             REPLACE(RTRIM(REPLACE(R, '0', ' ')), ' ', '0') AS R
                      FROM Split)

SELECT Result = L + R FROM Adjusted

上記のスクリプトの出力は次のとおりです。

Result
--------
9.786534
9.78653
9.78
9.70
9.00
于 2012-04-27T08:12:40.447 に答える
0

decimal(18,6)フィールドの場合、これは機能するはずです:

select trim(to_char(Amount, '999999999999999999.99')) from EmployeeMaster 

(少なくともOracleの場合、他のタイプについてはわかりません)

于 2016-05-03T14:07:18.967 に答える
0

あなたの場合はpatindexを使用していると思います:

CASE WHEN FLOOR(Amount) <> CEILING(Amount) THEN 
     LTRIM(SUBSTRING(STR(Amount, 18, 6), 1, LEN(STR(Amount, 18, 6)) - PATINDEX('%[^0]%', REVERSE(str(Amount, 18, 6))) + 1))
     ELSE STR(Amount,18,2)
END
于 2013-02-27T14:31:16.480 に答える