【问题标题】:How to truncate string using SQL server如何使用 SQL Server 截断字符串
【发布时间】:2013-02-15 01:07:03
【问题描述】:

我在 SQL Server 中有大字符串。我想将该字符串截断为 10 或 15 个字符

原始字符串

this is test string. this is test string. this is test string. this is test string.

想要的字符串

this is test string. this is ......

【问题讨论】:

  • 您的“所需字符串”包含来自“原始字符串”的 28 个字符,不接近您要求的“10 或 15”

标签: sql-server tsql


【解决方案1】:

如果你只想返回你的长字符串的几个字符,你可以使用:

select 
  left(col, 15) + '...' col
from yourtable

SQL Fiddle with Demo

这将返回字符串的前 15 个字符,然后将 ... 连接到它的末尾。

如果您想确保小于 15 的字符串不会得到 ...,那么您可以使用:

select 
  case 
    when len(col)>15
    then left(col, 15) + '...' 
    else col end col
from yourtable

SQL Fiddle with Demo

【讨论】:

  • 如果原始字符串少于 15 个字符,当 ... 不适用时,您仍然会附加它
  • @KM。添加了一个检查字符串长度的版本
  • 如果 col 的长度正好是 15,它会在执行 left(col,15) 时获取整个字符串,然后将 '...' 放在末尾。当然更好的解决方案是检查'when len(col) > 15'。
【解决方案2】:

你可以使用

LEFT(column, length)

SUBSTRING(column, start index, length)

【讨论】:

  • 如果我的回答听起来粗鲁,我很抱歉,这并不是粗鲁的。但是这个问题仍然不应该被问到,因为很容易找到答案。 MSDN 是一种寻找答案的好方法,在上面找到上述答案更容易。您不必阅读 500 页即可找到如何在 SQL 中截断字符串。你在这里得到所有的字符串函数msdn.microsoft.com/en-us/library/ms181984.aspx
  • 另外,MSDN 没有使用词 TRUNCATE 来描述这两个函数
【解决方案3】:

你也可以使用 Cast() 操作:

 Declare @name varchar(100);
set @name='....';
Select Cast(@name as varchar(10)) as new_name

【讨论】:

  • 当输出到文本文件时,我最喜欢这个,因为在输出文本文件中,只有新的字符数被分配给该列。 (例如 50 而不是 1000)以获得更紧凑的结果。
【解决方案4】:

我认为这里的答案很棒,但我想添加一个场景。

有几次我想从字符串的前面去掉一定数量的字符,而不用担心它的长度。使用 RIGHT() 和 SUBSTRING() 有几种方法可以做到这一点,但它们都需要知道字符串的长度,这有时会减慢速度。

我使用了 STUFF() 函数:

SET @Result = STUFF(@Result, 1, @LengthToRemove, '')

这会将不需要的字符串的长度替换为空字符串。

【讨论】:

    【解决方案5】:

    您也可以使用以下内容,iif 避免了 case 语句,仅在需要时添加省略号(仅适用于 SQL Server 2012 及更高版本),并且 case 语句更符合 ANSI(但更冗长)

    SELECT 
      col, LEN(col), 
      col2, LEN(col2), 
      col3, LEN(col3) FROM (
      SELECT 
        col, 
        LEFT(x.col, 15) + (IIF(len(x.col) > 15, '...', '')) AS col2, 
        LEFT(x.col, 15) + (CASE WHEN len(x.col) > 15 THEN '...' ELSE '' END) AS col3 
      from (
          select 'this is a long string. One that is longer than 15 characters' as col
          UNION 
          SELECT 'short string' AS col
          UNION 
          SELECT 'string==15 char' AS col
          UNION 
          SELECT NULL AS col
          UNION 
          SELECT '' AS col
    ) x
    ) y
    

    【讨论】:

      【解决方案6】:
           CASE
           WHEN col IS NULL
              THEN ''
           ELSE SUBSTRING(col,1,15)+ '...' 
           END AS Col
      

      【讨论】:

        猜你喜欢
        • 2010-10-06
        • 2017-10-30
        • 2012-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-16
        • 1970-01-01
        相关资源
        最近更新 更多