【问题标题】:Error while executing Substring Function in SQL Server在 SQL Server 中执行子字符串函数时出错
【发布时间】:2015-08-17 08:32:33
【问题描述】:

当我在 SSMS 中执行此查询时

 SELECT SUBSTRING(NAME, 1, LEN(NAME) - 4) 
 FROM sys.tables 

我收到一个错误:

传递给 LEFT 或 SUBSTRING 函数的长度参数无效。

但是当我在这里执行这个查询时:

 SELECT SUBSTRING(NAME, 1, LEN(NAME) - 4) 
 FROM sys.tables 
 WHERE NAME LIKE '%_OLD'

我得到了输出。第一次查询失败的原因是什么?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    脚本失败的原因是某些表格的长度少于 4 个字符。 SUBSTRING 的第三个参数不能为负数。

    这里有一个解决方法:

    SELECT
      REVERSE(STUFF(REVERSE(NAME), 1,4,'')) 
    FROM
      Sys.tables
    

    脚本反转文本,删除前 4 个字符并再次反转其余字符。

    【讨论】:

      【解决方案2】:

      注意SUBSTRING函数的最后一个参数必须是正值

      您可能有一些名称少于 5 个字符的表。

      尝试执行此操作以查看表中名称的最小长度:

      SELECT MIN(LEN(Name)) AS MinLength
      FROM Sys.tables
      

      【讨论】:

        【解决方案3】:

        如果 length 参数不是有效长度,即 negative 一个。你得到这个错误。

        长度: 是一个正整数或 bigint 表达式,它指定如何 将返回表达式的许多字符。如果长度是 否定,产生错误并终止语句。如果 start 和 length 之和大于字符数 在表达式中,从 start 开始的整个值表达式是 返回

        例如:

        SELECT SUBSTRING('any string',1, -1)
        

        报错:

        传递给子字符串函数的长度参数无效。

        LIKE '%_OLD' 不会给出错误,因为它的Min length 将是4,所以Min 的值LEN(NAME)-4 将是0 or positive.

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-12-28
          • 1970-01-01
          • 1970-01-01
          • 2014-03-21
          • 2017-09-29
          • 2020-07-15
          • 1970-01-01
          相关资源
          最近更新 更多