传递给LEFT或SUBSTRING函数的无效长度参数(SQL Server)

jas*_*son 2 sql sql-server

我有这个问题:

CASE
   WHEN ISNUMERIC(SUBSTRING(dbo.Post.OdaSayisi, 1, CHARINDEX('+', dbo.Post.OdaSayisi) - 1)) = 1 
      THEN SUBSTRING(dbo.Post.OdaSayisi, 1, CHARINDEX('+', dbo.Post.OdaSayisi) - 1)
      ELSE 0
END AS RoomNumber,
Run Code Online (Sandbox Code Playgroud)

where OdaSayisi是一个像3 + 1,4 + 2的字符串.当我尝试编写此查询时:

SELECT *
FROM [myDB].[dbo].[MyView] 
WHERE RoomNumber = 3
Run Code Online (Sandbox Code Playgroud)

我在标题中收到此错误.我怎样才能解决这个问题?谢谢.

Gor*_*off 5

问题是某些值OdaSayisi没有'+'.最简单的解决方案是将一个用于CHARINDEX()功能

(CASE WHEN ISNUMERIC(SUBSTRING(dbo.Post.OdaSayisi, 1, CHARINDEX('+', dbo.Post.OdaSayisi + '+') - 1)) = 1
      THEN SUBSTRING(dbo.Post.OdaSayisi, 1, CHARINDEX('+', dbo.Post.OdaSayisi + '+') - 1)
      ELSE 0
 END) AS RoomNumber,
Run Code Online (Sandbox Code Playgroud)

+ '+'确保CHARINDEX()不会返回一个负数.

  • @Pred...如果任何参数为"NULL",则`substring()`返回"NULL".问题是由`CHARINDEX()`找不到字符导致的负长度参数. (2认同)