得到错误“无效的长度参数传递给LEFT或SUBSTRING函数”

时间:2018-09-06 13:47:20

标签: sql sql-server tsql ssms

在下面的查询中,我没有几个问题,当我取消注释并运行整个查询时,在姓氏行中返回错误:

  

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

我该如何删除邮政编码中的连字符,以下是代码:

   FName ='"'+LTRIM(RTRIM(Substring(HimRec_Main.NameFirst,Charindex(',',HimRec_Main.NameMiddle)+1, LEN(HimRec_Main.NameLast))))+'"',
 --LName ='"'+LTRIM(RTRIM(Substring(HimRec_Main.NameLast,1,Charindex(',', HimRec_Main.NameLast)-1)))+'"', ------- **need help in this one **

最后一次添加姓氏行时会出现此错误

  

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

在下面,我想删除邮政编码中的破折号后的任何内容,例如示例(99297-9925)。在这里,我想删除“ -9925”。只有这样的几条记录存在:

  [postal Code] =HimRec_Address.Zip,---- **need help in this one **

3 个答案:

答案 0 :(得分:2)

我不确定代码是否正确,但是用charindex()解决此问题的最简单方法是将搜索到的字符附加到字符串的末尾:

FName = ('"' +
         LTRIM(RTRIM(Substring(HimRec_Main.NameFirst, 
                               Charindex(',', HimRec_Main.NameMiddle + ',') + 1, 

                              LEN(HimRec_Main.NameLast)
                              )
                    )
               ) +
         '"'
        ),
LName = ('"' +
         LTRIM(RTRIM(Substring(HimRec_Main.NameLast, 1,
                     Charindex(',', HimRec_Main.NameLast + ',') - 1)
                    )
              ) + 
         '"'
        ) ------- **need help in this one **

答案 1 :(得分:1)

您也可以使用 SUBSTRING_INDEX

对其进行拆分
SET @NAME:="Max,Mustermann";

SELECT SUBSTRING_INDEX(@Name, ',', 1);
SELECT SUBSTRING_INDEX(@Name, ',', -1);

样品

MariaDB [(none)]>     SET @NAME:="Max,Mustermann";
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]>     SELECT SUBSTRING_INDEX(@Name, ',', 1);
+--------------------------------+
| SUBSTRING_INDEX(@Name, ',', 1) |
+--------------------------------+
| Max                            |
+--------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]>     SELECT SUBSTRING_INDEX(@Name, ',', -1);
+---------------------------------+
| SUBSTRING_INDEX(@Name, ',', -1) |
+---------------------------------+
| Mustermann                      |
+---------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]>

答案 2 :(得分:0)

HimRec_Main.NameLast的值中没有','时,您会收到错误消息

以下查询针对此类值返回NULL而不是抛出错误:

LName ='"'+LTRIM(RTRIM(Substring(HimRec_Main.NameLast,1, NULLIF(Charindex(',', HimRec_Main.NameLast), 0)-1)))