从文本列中仅选择第一行字符到CR / LF

时间:2012-02-10 14:10:49

标签: sql-server tsql

是否可以在SQL Server文本列中仅选择或子串第一行字符,然后在另一个表的另一个文本字段中作为第一行字符前缀?

4 个答案:

答案 0 :(得分:2)

如果您运行的是SQL Server 2005或更高版本:

在LEFT命令中,使用CHAR(13)上的CHARINDEX查找第一个换行符的位置,如下例所示:

declare @a table(id int identity(1,1) not null, lines text); --Source
declare @b table(id int identity(1,1) not null, lines text); --Target

insert into @a(lines) values ('1111111'+char(13)+char(10)+'222222')
insert into @b(lines) values ('aaaaa');

update b
set lines=LEFT(cast(a.lines as varchar(max)),CHARINDEX(char(13),cast(a.lines as varchar(max)),1)-1)+cast(b.lines as varchar(max))
from @a a
join @b b on a.id=b.id;

select * from @b;

我建议如果可能的话,还要将TEXT数据类型更新为varchar(max)。 varchar(max)更加健壮。

答案 1 :(得分:1)

是的,在文本字段的第一个换行符之前执行substringleft

答案 2 :(得分:1)

您可以通过子查询轻松分配此内容,以便在插入或更新语句中使用。

SELECT  ( CASE WHEN CHARINDEX(CHAR(13), action_Item.Description) = 0
           THEN action_Item.Description
           ELSE SUBSTRING(action_Item.Description, 0,
                          CHARINDEX(CHAR(13), action_Item.Description))
      END ) AS [Description] FROM    action_Item

如果我从名为“action_Item”

的表中的“描述”字段中选择第一行,我在哪里

答案 3 :(得分:0)

DECLARE @crlf   char(2);

SET     @crlf = CHAR(13) + CHAR(10);

UPDATE  table1
SET     LEFT(table2.fieldWithCRLF, CHARINDEX(table2.fieldWithCRLF, @crlf, 0) - 1) + table1.fieldToPrepend
FROM    table1
        INNER JOIN table2
            ON  table1.sharedKey = table2.sharedKey
WHERE   CHARINDEX(table2.fieldWithCRLF, @crlf, 0) > 0