选择两个值SQL 2008之间的字符串的一部分

时间:2015-01-30 11:05:45

标签: sql-server-2008 substring charindex

我正在尝试在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函数的长度参数无效。

但我正在努力解决。

2 个答案:

答案 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