Select 两个值之间的字符串部分 SQL 2008
Select part of a string between two values SQL 2008
我正在尝试 select 两个值之间的 strint 的一部分,我设法让它工作到大约 90%,但随后出现错误 -
SUBSTRING(TranText, CHARINDEX('x', TranText) + 1, LEN(TranText) - CHARINDEX('x', TranText) - CHARINDEX('/', REVERSE(TranText)))
查询的字段是这样的
Start Date : 01/02/2013 50 x 156.00/MX + 207.64
期望的结果是
156.00
现在我认为问题是因为有时 X 可以在其前后有一个 space,或者根本没有 space。它在抛出之前通过了大约 114,000 行
Invalid length parameter passed to the LEFT or SUBSTRING function.
但正在努力解决。
试试这个。使用REPLACE
函数然后解析。
DECLARE @string AS VARCHAR(100), @result AS VARCHAR(100)
DECLARE @nStart AS int
SET @string = 'Start Date : 01/02/2013 50 x 156.00/MX + 207.64'
SET @result = REPLACE(@string, '/', '')
SET @nStart = CHARINDEX('x', @result) + 1
SET @result = SUBSTRING(@result, @nStart, CHARINDEX('M',@result) - @nStart)
SELECT @result
主要原因可能是因为 LEN(@QRY) - CHARINDEX('x', @QRY)-CHARINDEX('/', REVERSE(@QRY))
小于零,即负值。这反过来会在 SUBSTRING
中抛出错误,因为 SUBSTRING 的最小索引为零。因此,我们在 case 语句中检查该条件。
SELECT CASE WHEN LEN(TranText) - CHARINDEX('x',TranText)-CHARINDEX('/', REVERSE(TranText)) >= 0 THEN
SUBSTRING(TranText, CHARINDEX('x', TranText) + 1, LEN(TranText) - CHARINDEX('x', TranText) - CHARINDEX('/', REVERSE(TranText)))
ELSE NULL END
FROM YOURTABLE
我正在尝试 select 两个值之间的 strint 的一部分,我设法让它工作到大约 90%,但随后出现错误 -
SUBSTRING(TranText, CHARINDEX('x', TranText) + 1, LEN(TranText) - CHARINDEX('x', TranText) - CHARINDEX('/', REVERSE(TranText)))
查询的字段是这样的
Start Date : 01/02/2013 50 x 156.00/MX + 207.64
期望的结果是
156.00
现在我认为问题是因为有时 X 可以在其前后有一个 space,或者根本没有 space。它在抛出之前通过了大约 114,000 行
Invalid length parameter passed to the LEFT or SUBSTRING function.
但正在努力解决。
试试这个。使用REPLACE
函数然后解析。
DECLARE @string AS VARCHAR(100), @result AS VARCHAR(100)
DECLARE @nStart AS int
SET @string = 'Start Date : 01/02/2013 50 x 156.00/MX + 207.64'
SET @result = REPLACE(@string, '/', '')
SET @nStart = CHARINDEX('x', @result) + 1
SET @result = SUBSTRING(@result, @nStart, CHARINDEX('M',@result) - @nStart)
SELECT @result
主要原因可能是因为 LEN(@QRY) - CHARINDEX('x', @QRY)-CHARINDEX('/', REVERSE(@QRY))
小于零,即负值。这反过来会在 SUBSTRING
中抛出错误,因为 SUBSTRING 的最小索引为零。因此,我们在 case 语句中检查该条件。
SELECT CASE WHEN LEN(TranText) - CHARINDEX('x',TranText)-CHARINDEX('/', REVERSE(TranText)) >= 0 THEN
SUBSTRING(TranText, CHARINDEX('x', TranText) + 1, LEN(TranText) - CHARINDEX('x', TranText) - CHARINDEX('/', REVERSE(TranText)))
ELSE NULL END
FROM YOURTABLE