0

我试图在 2 个值之间选择一个字符串的一部分,我已经设法让它工作到大约 90%,但随后出现错误 -

SUBSTRING(TranText, CHARINDEX('x', TranText) + 1, LEN(TranText) - CHARINDEX('x', TranText) - CHARINDEX('/', REVERSE(TranText)))

它正在查询的字段是这样的

开始日期 : 01/02/2013 50 x 156.00/MX + 207.64

期望的结果是

156.00

现在我认为问题是因为有时 X 可以在它之前或之后有一个空格,或者根本没有空格。它在投掷之前通过了大约 114,000 行

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

但我正在努力解决。

4

2 回答 2

2

主要原因可能是因为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
于 2015-01-30T11:28:43.297 回答
1

尝试这个。使用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
于 2015-01-30T11:20:43.100 回答