당신이 이동 : 여기에 이야기의
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
나는 이것이 내가 위의 이해 내용에 따라 다시 수 없습니다 .. 당신은 샘플 데이터와 SQL 바이올린을 만들 수 있습니까? http://sqlfiddle.com/#!6 –
http://sqlfiddle.com/#!6/f6d02/7/0 – tsqln00b
이 항목은 LC 금액 필드가 6 자리가 넘지 않은 곳에서 작동합니다. 병합 (DocumentNo, 배정, [LC 금액]) – tsqln00b