0

まず、テーブルの値を整数として変換しています

cast(convert(int, isnull(b.temp,0)) as varchar(500))

次に、たとえば以下のように値を出力したいと思います

1 as 001
12 as 012
123 as 123

-1 as -001 
-15 as -015
-234 as -234

整数値の長さが 3 を超える場合は、値を表示しないか、削除します。整数にマイナス (-) 符号がある場合、それは長さの一部ではないため、-001 は長さ 3 と見なされます

したがって、001 と -001 は長さ 3 として受け入れられます

どうやってやるの?

4

3 に答える 3

2

範囲内の数字を 0 にしようとしているようです。これは私がそれを行う1つの方法です:

select (case when val between 0 and 999
             then right('000'+cast(<col> as varchar(100)), 3)
             when val between -999 and 0
             then '-'+right('000'+cast(abs(<col>) as varchar(100)), 3)
             else ''
        end)
from t
于 2012-07-20T19:43:20.450 に答える
0

以下の解決策が機能します。ありがとう

declare @num1 as varchar(50)
set @num1 = '1'
       select (case 
               when @num1 between 0 and 999  then right('000'+cast(@num1 as varchar(100)), 3) 
               when @num1 between -999 and 0  then '-'+right('000'+cast(abs(@num1) as varchar(100)), 3)  
               else ''         
               end) as t 
于 2012-07-20T20:02:14.787 に答える
0

これを行う効率的な方法は実際にはありませんが、これを行う必要がある状況があることは理解しています。私はおそらく、このようなものを関数に変えてそれを行うでしょう。

DECLARE @myInt as INT
    SET @myInt = -9

DECLARE @padding AS VARCHAR(1)
    SET @padding = '0'
DECLARE @length AS INT
    SET @length = 3 - LEN(ABS(@myInt))

DECLARE @result AS VARCHAR(5)
    SET @result = REPLICATE(@padding, @length) + cast(ABS(@myInt) as VARCHAR(3))
IF @myInt < 0   
        SET @result = '-' + @result

SELECT @result

これは実際には SQL ではなくコードで行う必要があります。

于 2012-07-20T20:11:26.260 に答える