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

Sql server 2008 选择两个值之间字符串的一部分SQL 2008,sql-server-2008,substring,charindex,Sql Server 2008,Substring,Charindex,我试图在两个值之间选择一个strint的一部分,我设法使它工作到90%左右,但随后得到一个错误- SUBSTRING(TranText, CHARINDEX('x', TranText) + 1, LEN(TranText) - CHARINDEX('x', TranText) - CHARINDEX('/', REVERSE(TranText))) 它所查询的字段是这样的 开始日期:2013年2月1日50 x 156.00/MX+207.64 达到了预期的效果 156.00 现在我认为问题是

我试图在两个值之间选择一个strint的一部分,我设法使它工作到90%左右,但随后得到一个错误-

SUBSTRING(TranText, CHARINDEX('x', TranText) + 1, LEN(TranText) - CHARINDEX('x', TranText) - CHARINDEX('/', REVERSE(TranText)))
它所查询的字段是这样的

开始日期:2013年2月1日50 x 156.00/MX+207.64

达到了预期的效果

156.00

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

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


但是我正在努力解决这个问题。

试试这个。使用
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

试试这个。使用
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

试试这个。使用
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

试试这个。使用
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))
小于零,即负值。这反过来会在
子字符串中引发错误,因为子字符串的最小索引为零。因此,我们在案例陈述中检查该条件

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

主要的根本原因可能是因为
LEN(@QRY)-CHARINDEX('x',@QRY)-CHARINDEX('/',REVERSE(@QRY))
小于零,即负值。这反过来会在
子字符串中引发错误,因为子字符串的最小索引为零。因此,我们在案例陈述中检查该条件

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

主要的根本原因可能是因为
LEN(@QRY)-CHARINDEX('x',@QRY)-CHARINDEX('/',REVERSE(@QRY))
小于零,即负值。这反过来会在
子字符串中引发错误,因为子字符串的最小索引为零。因此,我们在案例陈述中检查该条件

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

主要的根本原因可能是因为
LEN(@QRY)-CHARINDEX('x',@QRY)-CHARINDEX('/',REVERSE(@QRY))
小于零,即负值。这反过来会在
子字符串中引发错误,因为子字符串的最小索引为零。因此,我们在案例陈述中检查该条件

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