我正在尝试在2个值之间选择一个strint的一部分,我已经设法让它工作到大约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函数的长度参数无效。
但我正在努力解决。
答案 0 :(得分:2)
主要原因可能是因为LEN(@QRY) - CHARINDEX('x', @QRY)-CHARINDEX('/', REVERSE(@QRY))
小于零,即负值。由于SUBSTRING的最小索引为零,因此这将在SUBSTRING
中抛出错误。因此,我们在案例陈述中检查该条件。
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
答案 1 :(得分: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