sql >> データベース >  >> RDS >> Sqlserver

SQL で小数点以下の桁数を数えるにはどうすればよいですか?

    次のようなものを使用できます:

    declare @v sql_variant
    
    set @v=0.1242311
    
    select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale
      

    これは 7 を返します .

    上記のクエリを float で動作させようとしました 列ですが、期待どおりに機能させることができませんでした。 sql_variant でのみ機能します あなたがここで見ることができる列:http://sqlfiddle.com/#!6/5c62c/ 2

    そこで、別の方法を見つけて、この回答 に基づいて構築しました 、これを手に入れました:

    SELECT value,
    LEN(
        CAST(
             CAST(
                  REVERSE(
                          CONVERT(VARCHAR(50), value, 128)
                         ) AS float
                 ) AS bigint
            )
       ) as Decimals
    FROM Numbers
      

    これをテストするための SQL Fiddle は次のとおりです。 23d4f/29

    そのちょっとした癖を説明するために、float 値に小数部分がない場合を処理する修正版を次に示します。

    SELECT value,
           Decimals = CASE Charindex('.', value)
                        WHEN 0 THEN 0
                        ELSE
               Len (
                Cast(
                 Cast(
                  Reverse(CONVERT(VARCHAR(50), value, 128)) AS FLOAT
                     ) AS BIGINT
                    )
                   )
                        END
    FROM   numbers
      

    付属の SQL Fiddle は次のとおりです。



    1. PostgreSQL INSERT ON CONFLICT UPDATE(upsert)は、除外されたすべての値を使用します

    2. SQL Serverの名前からオブジェクトのIDを取得します:OBJECT_ID()

    3. 最大値と対応する列を取得します

    4. MySQL:テーブルが存在する場合は、ELSEcreateを切り捨てて挿入します