在下面的查询中,我没有几个问题,当我取消注释并运行整个查询时,在姓氏行中返回错误:
传递给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 **
答案 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)))