我正在使用 Sql 服務器。我正在嘗試撰寫一個 sql 查詢來將名為 fullName 的列劃分為 firstName 和 lastName 列。但我不斷收到此錯誤:
Msg 537, Level 16, State 2, Line 1
Invalid length parameter passed to the LEFT or SUBSTRING function.
這是我的查詢:
SELECT CASE
WHEN (LEN (FullName) - LEN (REPLACE (FullName, ' ', '')) 1) > 0
THEN
Substring (FullName, 1, Charindex (' ', FullName) - 1)
ELSE
''
END AS FirstName,
CASE
WHEN (LEN (FullName) - LEN (REPLACE (FullName, ' ', '')) 1) > 0
THEN REVERSE(SUBSTRING(REVERSE(FullName),
1,
CHARINDEX(' ', REVERSE(FullName)) - 1))
ELSE FullName
END AS LastName,email, c.customerid
FROM Customer c
什么可能導致此錯誤?我已驗證沒有全名記錄為空“”或 null。但是,如果有人忘記添加他們的姓氏,fullname 可能只包含名字 - 我不確定這是否是問題?
如果我洗掉 1:
WHEN (LEN (FullName) - LEN (REPLACE (FullName, ' ', ''))) > 0
然后它回傳結果 - 但 firstname 和 lastname 列都是空的,即使 fullname 實際上包含名字但只包含名字 - 例如“Seyhan”。我怎樣才能修復它,以便至少它回傳 firstname ?
uj5u.com熱心網友回復:
錯誤訊息本身是不言自明的,它清楚地表明您為 SUBSTRING 函式指定了無效的長度引數。
SELECT SUBSTRING('SQL Tutorial', 1, LEN(SUBSTRING('SQL Tutorial',1,(CHARINDEX(' ', 'SQL Tutorial'))))) AS ExtractString;
上面的查詢回傳第一部分“SQL”
https://www.w3schools.com/sql/trysqlserver.asp?filename=trysql_func_sqlserver_substring
嘗試使用 STRING_SPLIT ( string , separator [ , enable_ordinal ] )
SELECT value FROM STRING_SPLIT ('Lorem ipsum dolor sit amet.', ' ');
在實踐中,前面的 SELECT 回傳了以下結果表:
| 價值 |
|---|
| 洛雷姆 |
| ipsum |
| 憂郁 |
| 坐 |
| 阿梅。 |
https://learn.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver16
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/512147.html
標籤:sqlsql服务器tsqlsql-server-2008
