2016-07-22 13 views
0

元のクエリ:SQLクエリで計算された行をSUBSTRする方法は?

SELECT F4105.COUNCS/10000 FROM F4105 

出力:

Numeric Expression 
    -------------------- 
    111.1643000000000000 
    111.1633000000000000 
    111.1633000000000000 
    101.7654000000000000 
    101.7654000000000000 
    112.7258000000000000 

私は、少なくとも最後の5ゼロを削除する必要があります。私は部分文字列をしようとしましたが、うまくいきませんでした。間違った出力で働いていた

Token F4105 was not valid. Valid tokens: (.

第二のクエリ:

(1) 
    SELECT SUBSTR((F4105.COUNCS/10000 AS 'co'),length((co)-5) FROM F4105 
(2) 
    SELECT SUBSTR((F4105.COUNCS/10000),length((F4105.COUNCS/10000)-5)) FROM F4105               

第一クエリは、私とエラーを与えた:ここ

は、クエリ(s)は私が試しています。

SUBSTR  
00   
000000  
000000  
000000  
000000  
000000 
+0

この質問は、ibm-midrangeタグで示されるIBM iのDB2に関するものです。 – WarrenT

答えて

4

式に列別名定義を混在させています。したがって、正しい表現は次のようになります。

SELECT SUBSTR(F4105.COUNCS/10000, length(F4105.COUNCS/10000.0) - 5) as coFROM F4105 

私はこれを行うことをお勧めしません。あなたには数式があります。ちょうどあなたがしたい10進表現に変換し、言う:

SELECT CAST(F4105.COUNCS/10000.0 as DECIMAL(10, 5)) 
+0

ありがとうございました。しかし、第1のものはゼロだけを出力している。 – Shank

+0

"最初のものはゼロのみを出力しています":私が提供した_answer_を参照してください。なぜなら、上記の第1の理由は、「coFROM」も「FROM」として書き直されて、 LEFTを使用してSUBSTRの使用を置き換えるか、またはSUBSTRの第2引数として文字「1」を挿入します( 'length(...)'が第3引数になります)。 – CRPence

1

SUBSTRスカラーの構文を効果的SUBSTR(expression, start-pos, for-length)IBM i 7.1->Database->Reference->SQL reference->Built-in functions->Scalar functions->SUBSTR

OPに使用示すLENGTH()式が第二引数に指定されています;すなわち、start-pos引数。最も近いデータを得るためには、開始位置として、string-length minus fiveの計算結果が明らかにである。。すなわち、開始位置は文字列の長さより5バイト小さい。それは、当然のことながら、除算の小数の結果の文字列表現の終わりから5バイトの重要でないゼロを特定します。

として有効な補正従って、とSUBSTRスカラーを交換•
[こうして第三引数になるLENGTH()式を作る]スタート-POS引数の1の一定の整数値を挿入•
のいずれかであろうLEFTスカラー。
これらのリビジョンのどちらも、少なくとも望ましい出力と言われるものに似ているものを達成するでしょう。しかし、DDLとOPで明示的に出力されるべきものがなければ、これらの改訂された表現の実際の効果は推測できませんでした。
いずれにしても、これらの変更のいずれかであっても、提案された代替の文字列式は、明示的なキャスティングがない場合と同様に、すなわち、2つの改訂式はおそらく修正として提案[まだ望ましい結果を得るために同様に低いままである]である:

SUBSTR((F4105.COUNCS/10000), 1,length((F4105.COUNCS/10000)-5))  

    LEFT((F4105.COUNCS/10000),length((F4105.COUNCS/10000)-5)) 

は、確立されたデータ型\長さが明示的なキャストを使用して属性を有する[すなわちリテラル数値のリストからOPに表示される出力を生成する入力値を生成する派生テーブル式では、次の問合せの文字列式によって小数点の右側の10進精度の11桁のみ[すなわちスケール]が維持されます。視覚的には、末尾の5桁が切り捨てられます。

with F4105 (COUNCS) as (values 
    (dec( 1111643. , 9, 2)) 
    ,(dec( 1111633. , 9, 2)) 
    ,(dec( 1111633. , 9, 2)) 
    ,(dec( 1017654. , 9, 2)) 
    ,(dec( 1017654. , 9, 2)) 
    ,(dec( 1127258. , 9, 2)) 
         )   
    SELECT cast( dec((F4105.COUNCS/10000), 17, 11) as varchar(19)) 
    FROM F4105       
関連する問題