是否可以在SQL Server文本列中仅选择或子串第一行字符,然后在另一个表的另一个文本字段中作为第一行字符前缀?
答案 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)
是的,在文本字段的第一个换行符之前执行substring
或left
。
答案 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