我想如何转换会计GL编号
99999999999999999
到
999-99999-99-9999.999
在对MSSQL服务器2005的查询中
我不需要更新数据,只需在查询时转换STRING。
表:GLM_MASTER__ACOUNT 字段:帐户
感谢。
答案 0 :(得分:13)
使用STUFF()
的另一种方法DECLARE @a varchar(64)
SET @a = '99999999999999999'
SELECT STUFF(STUFF(STUFF(STUFF(@a, 4, 0, '-'), 10, 0, '-'), 13, 0, '-'), 18, 0, '.')
答案 1 :(得分:8)
您需要使用SUBSTRING:
SELECT
SUBSTRING(account, 1, 3) + '-' +
SUBSTRING(account, 4, 5) + '-' +
SUBSTRING(account, 9, 2) + '-' +
SUBSTRING(account, 11, 4) + '.' +
SUBSTRING(account, 15, 3)
答案 2 :(得分:1)
我一直在寻找类似的东西,发现这很有用,因此,为了回馈社区,我制作了一个功能来创建动态蒙版
CREATE FUNCTION dbo.fn_MaskString (@Value NVARCHAR(MAX), @Mask NVARCHAR(MAX), @Char NVARCHAR(10))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @Result NVARCHAR(MAX)
DECLARE @CharPos INT
DECLARE @Position INT
SET @Result = @Value
SET @CharPos = 1
WHILE @CharPos <= LEN(@Char)
BEGIN
SELECT @Position = CHARINDEX(SUBSTRING(@Char,@CharPos, 1), @Mask, 1)
WHILE @Position > 0 AND @Position <= LEN(@Result)
BEGIN
SELECT @Result = STUFF(@Result, @Position, 0, SUBSTRING(@Char,@CharPos, 1))
SELECT @Position = CHARINDEX(SUBSTRING(@Char,@CharPos, 1), @Mask, @Position+1)
END
SET @CharPos += 1
END
RETURN @Result
END
GO
SELECT dbo.fn_MaskString('99999999999999999', 'XXX-XXXXX-XX-XXXX.XXX', '-.')
-- RESULT 999-99999-99-9999.999