回车之前的第一行数据的SQL SELECT和UPDATE

时间:2015-11-12 17:25:21

标签: sql sql-server tsql sql-server-2008-r2

我在名为描述的数据库中有一个字段,它是 text 的数据类型。第一行数据始终取自"客户名称"另一个数据库的字段,第一次回车后的任何内容都包含在此客户端上获取的内部注释。

示例

This is the first line.
NOTES: This is the second line that has notes.

我希望能够查询此字段,只返回"这是第一行。"部分,以及如何更新此字段。有时客户端名称会更改,我们希望更新此字段,但保留可能存在的任何符号。

1 个答案:

答案 0 :(得分:3)

您可以对LEFT/CHARINDEX使用简单的字符串操作,例如SELECT

CREATE TABLE #tab(note VARCHAR(1000));

INSERT INTO #tab VALUES('This is the first line.' + CHAR(10) + CHAR(13) + 
'NOTES: This is the second line that has notes.');

SELECT 
   CASE WHEN CHARINDEX(CHAR(10), note) > 0
        THEN LEFT(note, CHARINDEX(CHAR(10), note) - 1)
        ELSE note
   END AS first_line
FROM #tab;

REPLACE UPDATE

DECLARE @new_value VARCHAR(100) = 'This is updated first line';

UPDATE #tab
SET note = CASE WHEN CHARINDEX(CHAR(10), note) > 0 
                THEN REPLACE(note, 
                   LEFT(note, CHARINDEX(CHAR(10), note) - 1),
                   @new_value)
                ELSE @new_value
           END
-- WHERE ID = ?;

SELECT *
FROM #tab;

LiveDemo

我认为新行是CHAR(10) + CHAR(13)