2017-12-11 5 views
1

하나의 큰 필드로 연결하려는 세 개의 필드가 있습니다. 필드 중 두 개가 varchar이지만 한 개는 float입니다. 특정 상황에서 연결된 필드에 과학 표기법이 표시됩니다. 연결된 필드는 varchar 여야하며 형식이 어떻게 적용되는지에 관계없이 세 필드의 조합을 표시해야합니다. 값이 모두 숫자 일 때 두 개의 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

나는 이것이 내가 위의 이해 내용에 따라 다시 수 없습니다 .. 당신은 샘플 데이터와 SQL 바이올린을 만들 수 있습니까? http://sqlfiddle.com/#!6 –

+1

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

+0

이 항목은 LC 금액 필드가 6 자리가 넘지 않은 곳에서 작동합니다. 병합 (DocumentNo, 배정, [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 개의 문자를 제거합니다. 이것은 .도 포함합니다.

출력 : tsqln00b @

482011017220120295-27.08 
48101224752014070110625451.5124 
8200022827TPE035948900001205.5 
8200022827TPE03594890000110000000 
관련 문제