2017-12-11 20 views
1

私は1つの大きなフィールドに連結しようとしている3つのフィールドを持っています。 2つのフィールドはvarcharですが、1つは浮動小数点です。特定の状況では、連結フィールドには科学記法が表示されます。連結フィールドは、varcharであり、どのようにフォーマットされているかに関係なく、3つのフィールドの組み合わせを表示する必要があります。値がすべて数値である場合、2つのvarcharフィールドを連結するだけで、私は科学的表記を見ています。なぜこれが起こっているのですか?どのように修正できますか?ここで私は連結をやろうとしています方法のいくつかの例は以下のとおりです。CAST numeric to varcharは科学的表記を提供しています

Field1 = e.DocumentNo + e.Assignment + CAST(CAST([Amount in LC] as int) as nvarchar(50)) 

Field2 = CAST(e.DocumentNo + e.Assignment as varchar(255)) 

私もCONVERTを使用してみましたが、それは期待される結果を提供していません。 DocumentNoはvarchar(255)、Assignmentはvarchar(255)ですが、それぞれの値が5115146916と1610000の場合、Field2は5.11515E + 16のように見えます。

また、フィールドにCONCAT()を使用しようとしましたが、同じ望ましくない結果が生成されます。

+0

tsqln00b @私は上記の理解ものに基づいてこれを再作成することはできません..あなたは、サンプルデータとSQLフィドルを構築することができますか? http://sqlfiddle.com/#!6 –

+1

http://sqlfiddle.com/#!6/f6d02/7/0 – tsqln00b

+0

これはLC額が6桁を超えている場合に有効です。 CONCAT(DocumentNo、Assignment、[LC額]) – tsqln00b

答えて

1

ここに行く:ここに物語の

IF OBJECT_ID('TEMPDB..#ConcatData','U') IS NOT NULL 
DROP TABLE #ConcatData; 

CREATE TABLE #ConcatData(
[Amount in LC] [float] NULL, 
[Assignment] [varchar](255) NULL, 
[DocumentNo] [varchar](255) NULL) 

INSERT INTO #ConcatData 
VALUES 
(-27.08, '20120295', '4820110172'), 
(10625451.5124, '20140701', '4810122475'), 
(205.5, 'TPE035948900001', '8200022827'), 
(10000000, 'TPE035948900001', '8200022827') 

SELECT DOCUMENTNO + 
     ASSIGNMENT + 
     CASE WHEN RIGHT(str([amount in lc],50,4),4) = '0000' 
       THEN ltrim(LEFT(str([amount in lc],50,4),LEN(str([amount in lc],50,4))-5)) 
      WHEN RIGHT(str([amount in lc],50,4),3) = '000' 
       THEN ltrim(LEFT(str([amount in lc],50,4),LEN(str([amount in lc],50,4))-3)) 
      WHEN RIGHT(str([amount in lc],50,4),2) = '00' 
       THEN ltrim(LEFT(str([amount in lc],50,4),LEN(str([amount in lc],50,4))-2)) 
      WHEN RIGHT(str([amount in lc],50,4),1) = '0' 
       THEN ltrim(LEFT(str([amount in lc],50,4),LEN(str([amount in lc],50,4))-1)) 
      ELSE ltrim(str([amount in lc],50,4)) 
      END 
FROM #ConcatData 

道徳を、floatはあなたの列の右のデータ型ではありません。 floatは右のデータ型であるとき、私は実際に不快CASE文がSTR()によって引き起こされる過剰小数位のゼロを削除するために必要な、とにかく...

知りません。もっと必要なものもあるかもしれませんが、これは小数点以下4桁までカバーしています。

最初のTHENは、4ではなく5つの文字を削除します。これには.も含まれます。

出力:

482011017220120295-27.08 
48101224752014070110625451.5124 
8200022827TPE035948900001205.5 
8200022827TPE03594890000110000000