将字符插入SQL字符串

时间:2013-06-25 14:54:25

标签: sql insert-update

我有一个nvarchar列我需要在字符串中的固定点插入一个连字符。连字符需要在最右边的字符和下一个字符之间,并且再次在右边的第3个位置,例如: 列值为

0000050704 

我需要它

0000050-70-4

或值是

0555256321 

它应该是

0555256-32-1

无法看到这是如何完成的。谁能给我一点帮助?

3 个答案:

答案 0 :(得分:7)

假设字符串可以是可变长度,则需要在表达式中使用REVERSE()或许多令人讨厌的LEN()值。

declare @txt varchar(100) = '0000050704'

--If using SQL Server, the STUFF() function is your friend
select REVERSE(STUFF(STUFF(REVERSE(@txt), 2, 0, '-'), 5, 0, '-'))

--if not you'll need to concatenate SUBSTRING()s
select REVERSE(SUBSTRING(REVERSE(@txt), 1, 1) + '-' + SUBSTRING(REVERSE(@txt),2, 2) + '-' + SUBSTRING(REVERSE(@txt),4, LEN(@txt)))

答案 1 :(得分:1)

这取决于您的SQL服务器。请查看有关如何操作字符串的文档 - 我将假设SUBSTRING函数。

在MS SQL Server中你可以做某事。像这样:

UPDATE YourTableName SET 
    YourFieldName = 
        SUBSTRING(YourFieldName, 1,7) + "-" + 
        SUBSTRING(YourFieldName, 7,2) + "-" +
        SUBSTRING(YourFieldName, 9,1)

这会将您的字段内容分成三部分,并使用分隔符重建它...

在运行查询之前,我建议您尝试将其作为普通SELECT来查看它是否按需运行:

SELECT
    SUBSTRING(YourFieldName, 1,7) + "-" + 
    SUBSTRING(YourFieldName, 7,2) + "-" +
    SUBSTRING(YourFieldName, 9,1)
FROM YourTableName

请注意查询没有WHERE条件,因此会影响表的所有行。

答案 2 :(得分:1)

您可以使用这个简单的功能:

CREATE FUNCTION [dbo].[SetHyphen] (@S varchar(50)) RETURNS varchar(52)
BEGIN
RETURN STUFF(STUFF(@S,LEN(@S)-2,0,'-'),LEN(@S)+1,0,'-')
END

例如:

select [dbo].[SetHyphen]('0000050704')
0000050-70-4