如何以编程方式在字符串之前和之后添加撇号并在其间添加逗号?

时间:2009-07-22 14:46:01

标签: sql sql-server-2005 tsql

我在Outlook,Word或Excel中获得了数百个字符串的列表,如下所示:

等。 目前,我以逐一的方式对每个存储过程运行。

我怎样才能以编程方式在字符串前后添加撇号并在其间添加逗号,如下所示:('','','','','','','')?

我想更改我的存储过程以使用IN('','','')并立即运行所有这些过程?

4 个答案:

答案 0 :(得分:4)

DECLARE @STRING varchar(max) 
SELECT @STRING = '7864750A 7888801BZ 5189748C 48982572E 6936001F 7096235FG 3218833H'

SELECT '(''' + REPLACE(@STRING,' ',''',''') + ''')'

给出了这个结果:

('7864750A','7888801BZ','5189748C','48982572E','6936001F','7096235FG','3218833H')

答案 1 :(得分:1)

您可以编写一个表值UDF,它将字符串作为输入,并在表的不同行中返回项。像这样的东西(不是世界上最有效的东西......):

CREATE FUNCTION [dbo].[SplitMyValues]
(
    @Input VARCHAR(MAX)
)
RETURNS @Results TABLE
(
    Data VARCHAR(MAX)
)
AS
BEGIN

    DECLARE @Where   INT
    DECLARE @Length  INT
    DECLARE @Next    INT

    SET @Where  = 0
    SET @Length = LEN(@Input)

    WHILE (@Where < @Length)
    BEGIN
        SET @Next = CHARINDEX(' ', @Input, @Where)

        IF (@Next > 0)
        BEGIN
            INSERT INTO @Results VALUES (SUBSTRING(@Input, @Where, @Next - @Where))
            SET @Where = @Next + 1
        END
        ELSE
        BEGIN
            INSERT INTO @Results VALUES (SUBSTRING(@Input, @Where, LEN(@Input)))
            SET @Where = @Length
        END
    END

    RETURN
END

要查看输出,您可以运行此命令:

SELECT *
FROM
    dbo.SplitMyValues('7864750A 7888801BZ 5189748C 3218833H')

然后,您可以在WHEREUPDATE的{​​{1}}子句中执行加入或子查询,例如:

SELECT

答案 2 :(得分:1)

我不时在excel数据上使用的一个技巧......

假设从第2行开始的A列和B列中有多行数据。 我将转到C2单元格并在其中放置一个字符串公式。

="INSERT INTO MyTable(X, Y) SELECT '" & A2 & "', '" & B2 & "'"

评估为

INSERT INTO MyTable(X,Y)SELECT'AValue','BValue'

然后我将其复制并粘贴到C列...相关的单元格引用处理其余部分。

PS:注意空值!

答案 3 :(得分:0)

我只是使用find并将所有“”的实例替换为“','”,然后在结尾添加“('”在开头和“')”。