0

数値を特定の方法でフォーマットする方法についてサポートが必要です。

小数点以下 3 桁以下の数値はそのままにしてほしいです。

有効数字が 3 桁を超える場合、3 桁目以降のすべての数字を小数部分にしたいと考えています。

123 --> Stays the same
1234 --> 123.4

これはどのように行うことができますか?

編集:

1234567 --> 123.4567

私は SQL 2007 を使用しており、テーブルの値を更新したいと考えています。値は数値として格納されます。

4

5 に答える 5

2

数値解は次のとおりです。

UPDATE T SET NUM = NUM/POWER(10,FLOOR(LOG10(NUM))-2)
WHERE NUM>=1000

または SELECT ステートメント:

SELECT NUM, CASE WHEN NUM<1000 THEN NUM
    ELSE NUM/POWER(10,FLOOR(LOG10(NUM))-2) 
    END AS NewNUM
FROM T

正確な結果は、NUM のデータ型によって異なる場合があることに注意してください。FLOAT フィールドの場合、NUM が大きくなりすぎると、最後の小数点以下が丸められることがあります。NUMERIC 型の場合、末尾にゼロが追加されます。DECIMAL の場合、精度に注意する必要があります。これは、前述のすべての更新ソリューションに適用されることに注意してください。

于 2012-06-13T20:01:33.350 に答える
1

整数値のみの文字列を想定:

SELECT CASE WHEN LEN(Num) <= 3 THEN Num
    ELSE STUFF(Num,4,0,'.')
    END
FROM (VALUES('1234567'),('123'),('1234'),('12')) t(Num) --some sample values

結果:

123.4567
123
123.4
12
于 2012-06-13T19:38:15.157 に答える
1

私は他の場所のクロスポストでこれに答えましたが、完全を期すために:

WITH n(r) AS (
  SELECT 123 UNION ALL SELECT 1234 UNION ALL SELECT 1234567
)
SELECT LEFT(r, 3) + CASE 
  WHEN LEN(r) > 3 THEN '.' + SUBSTRING(RTRIM(r),4,38) ELSE '' END 
FROM n;
于 2012-06-14T20:57:10.243 に答える
1

これはうまくいくかもしれません

SELECT 
   CASE WHEN Num > 999 THEN Num/10
   ELSE
      Num
   END As Num

もっと良い方法があるかもしれませんが、これは私が考えることができるものです

于 2012-06-13T18:30:32.650 に答える
1

文字列でこれを行うことができます。

CREATE TABLE T
( NUM NUMERIC(38,19) );

INSERT INTO T (NUM) VALUES ( 123456789 );
INSERT INTO T (NUM) VALUES ( 12345 );
INSERT INTO T (NUM) VALUES ( 123 );
INSERT INTO T (NUM) VALUES ( 1 );


SELECT CAST(
   CASE WHEN NUM < 999 THEN CAST(FLOOR(NUM) AS VARCHAR) 
        ELSE SUBSTRING(CAST(NUM AS VARCHAR), 1, 3) + '.' 
           + SUBSTRING(CAST(FLOOR(NUM) AS VARCHAR), 4, LEN(CAST(NUM AS VARCHAR)) - 3) 
    END AS NUMERIC(38, 19))
FROM T

UPDATE T
SET NUM = CAST(CASE WHEN NUM < 999 THEN CAST(FLOOR(NUM) AS VARCHAR) 
        ELSE SUBSTRING(CAST(NUM AS VARCHAR), 1, 3) + '.' 
           + SUBSTRING(CAST(FLOOR(NUM) AS VARCHAR), 4, LEN(CAST(NUM AS VARCHAR)) - 3) 
    END AS NUMERIC(38, 19));

SQLFiddle に実際のを載せました。

于 2012-06-13T18:45:10.157 に答える