【问题标题】:SQL: Insert a linebreak in varchar stringSQL:在 varchar 字符串中插入换行符
【发布时间】:2016-08-05 03:08:13
【问题描述】:

我在 StackOverflow 上搜索了有关如何在 SQL 文本字符串中插入换行符的所有可能解决方案。我已经提到了这个链接,但无济于事。 How to insert a line break in a SQL Server VARCHAR/NVARCHAR string

但是没有一个解决方案对我有用。

这就是我想要做的:

insert into sample (dex, col) 
values (2, 'This is line 1.' + CHAR(13)+CHAR(10) + 'This is line 2.')

但这是生成的输出:(Select Col from sample where dex = 2)

这是第 1 行。这是第 2 行。

这是我想要的输出:

这是第 1 行。
这是第 2 行。

如果有帮助,我正在使用 SQL Server 和 SSMS。

任何想法为什么它不起作用?

【问题讨论】:

  • 如果您从 SQL Management Studio 中运行它,它可能不会以这种方式显示,这可能是因为数据在系统中呈现方式的限制。如果您将其复制并粘贴到其他位置,它将位于两行。
  • len(col) 将具有 CR LF

标签: sql sql-server tsql


【解决方案1】:

完美运行:

CREATE TABLE sample(dex INT, col VARCHAR(100));

INSERT INTO sample(dex, col) 
VALUES (2, 'This is line 1.' + CHAR(13)+CHAR(10) + 'This is line 2.');

SELECT *
FROM sample;

LiveDemo

输出:

“问题”是SSMS 跳过换行符(以及其他字符)的网格视图。否则你会得到不同的行高,比如Excel


您可以在 SEDE 中观察到相同的行为。

LiveDemo-SEDELiveDemo-SEDE-TextView

输出:


您可以使用以下方法进行比较:

SELECT 'This is line 1.' + CHAR(13)+CHAR(10) + 'This is line 2.';
PRINT  'This is line 1.' + CHAR(13)+CHAR(10) + 'This is line 2.';

【讨论】:

    【解决方案2】:

    您的查询运行良好。 SSMS 默认在网格视图中显示所有查询输出,不显示换行符。

    要查看它,您可以使用 cntrl + T 快捷方式或如下所示切换到文本视图

    我为您的查询得到的结果如下(它们有效)

    【讨论】:

      【解决方案3】:

      CR/LF 字符在那里,只是在您的输出格式中,它们被忽略了。

      我创建了一个小提琴来说明这一点,它有 2 个VARCHAR 列。在第一个中我插入没有CR/LF 的文本,在第二个中我包含它们

      CREATE TABLE sample (dex INT, colnocr VARCHAR(50), col VARCHAR(50)) ;
      insert into sample (dex, colnocr, col) values 
      (2, 
       'This is line 1.' + 'This is line 2.',
       'This is line 1.' + CHAR(13) + CHAR(10) + 'This is line 2.'
      )
      ;
      

      如果你运行查询

      SELECT * FROM sample
      

      纯文本的结果是:

      | dex |                        colnocr |                              col |
      |-----|--------------------------------|----------------------------------|
      |   2 | This is line 1.This is line 2. | This is line 1.
      This is line 2. |
      

      但如果你在 tabular 中运行它:

      dex     colnocr                                                     col
      2       This is line 1.This is line 2.      This is line 1. This is line 2.
      

      检查一下:SqlFiddleDemo

      【讨论】:

        【解决方案4】:

        这个讨论有点晚了,但在 SSMS 2016 中,工具 | 上有一个选项。 Query Results / SQL Server / Results to Grid 下的选项菜单称为“Retain CR/LF on copy or save”。选中此框将允许您将网格结果中的单元格中的值复制到另一个查询窗口,并且仍然有换行符。

        【讨论】:

        • 我必须重新启动 SSMS 2017 才能使此选项生效。
        • 这是票。我不需要重新启动 SSMS。没有它肯定是行不通的。
        猜你喜欢
        • 2010-09-07
        • 2017-11-14
        • 2013-05-23
        • 1970-01-01
        • 1970-01-01
        • 2011-01-22
        • 2014-03-11
        • 2011-05-04
        • 1970-01-01
        相关资源
        最近更新 更多