Sql server 2008 选择两个值之间字符串的一部分SQL 2008
我试图在两个值之间选择一个strint的一部分,我设法使它工作到90%左右,但随后得到一个错误-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 现在我认为问题是
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