Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL字符串中插入字符_Sql_Insert Update - Fatal编程技术网

在SQL字符串中插入字符

在SQL字符串中插入字符,sql,insert-update,Sql,Insert Update,我有一个nvarchar列,我需要在字符串中的固定点插入连字符。连字符需要介于最右边的字符和下一个字符之间,并且再次位于从右边开始的第三个位置,例如: 列值为 0000050704 0555256321 我需要它 0000050-70-4 或价值是 0000050704 0555256321 应该是这样 0555256-32-1 我看不出这是怎么做到的。有人能给我一点帮助吗?假设字符串可以是可变长度的,您需要在表达式中使用REVERSE()或许多看起来很糟糕的LEN()值 d

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

0000050704 
0555256321 
我需要它

0000050-70-4
或价值是

0000050704 
0555256321 
应该是这样

0555256-32-1

我看不出这是怎么做到的。有人能给我一点帮助吗?

假设字符串可以是可变长度的,您需要在表达式中使用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)))

这取决于您的SQL server。请检查有关如何操作字符串的文档-我将假设子字符串函数

在MS SQL Server中,您可以执行以下操作:

UPDATE YourTableName SET 
    YourFieldName = 
        SUBSTRING(YourFieldName, 1,7) + "-" + 
        SUBSTRING(YourFieldName, 7,2) + "-" +
        SUBSTRING(YourFieldName, 9,1)
这将把你的字段内容分成三部分,并用分隔符重建它

在运行查询之前,我建议您以普通选择的方式进行尝试,以查看它是否能根据需要工作:

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

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

您可以使用此简单的功能:

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

如果是SQL Server,
STUFF()
就是为了这个而制作的。。。