您的代碼缺少子/替換
SUBSTRING(@String, charindex(' ', @String), CHARINDEX(' ', @String) - 4)
你不要在這裏使用'-'
位置。第一和第二CHARINDEX
將指向同一' '
(7位) - 這就是爲什麼這個代碼在所有
SUBSTRING (expression ,start , length)
http://msdn.microsoft.com/en-us/library/ms187748.aspx
使得完全沒有意義,您可以通過代碼修復它這
- 在首先從第一個空格到字符串結尾的子字符串,
- 取從階段1中獲得的字符串從其開始到第一個空間的字符串(給定的原始字符串中的第二個空格)
個
- 搜索「 - 」分隔符,並使用devided串部分
所以您的代碼需要至少兩個子。
試試這個:
DECLARE @String VARCHAR(100)
SET @String = 'Before 91-150 days'
SET @String = LTRIM(REPLACE(@String, 'before', ''))
SELECT @String
IF CHARINDEX('-', @String) > 0
BEGIN
SET @String = LEFT(@String, CHARINDEX('-', @String)-1)
SELECT @String
SELECT TRY_CAST(@String AS INT)-1
END
或
DECLARE @String VARCHAR(100)
SET @String = 'Before 91-150 days'
SELECT
CASE
WHEN CHARINDEX('-', LTRIM(REPLACE(@String, 'before', ''))) > 0
THEN TRY_CAST(LEFT(LTRIM(REPLACE(@String, 'before', '')), CHARINDEX('-', LTRIM(REPLACE(@String, 'before', '')))-1) AS INT)-1
ELSE @String
END
都與打印:
GO
PRINT 'test-1'
DECLARE @String VARCHAR(100)
SET @String = 'Before 91-150 days'
SET @String = LTRIM(REPLACE(@String, 'before', ''))
PRINT @String
IF CHARINDEX('-', @String) > 0
BEGIN
SET @String = LEFT(@String, CHARINDEX('-', @String)-1)
PRINT @String
PRINT TRY_CAST(@String AS INT)-1
END
PRINT '==='
GO
PRINT 'test-2'
DECLARE @String VARCHAR(100)
SET @String = 'Before 91-150 days'
PRINT
CASE
WHEN CHARINDEX('-', LTRIM(REPLACE(@String, 'before', ''))) > 0
THEN TRY_CAST(LEFT(LTRIM(REPLACE(@String, 'before', '')), CHARINDEX('-', LTRIM(REPLACE(@String, 'before', '')))-1) AS INT)-1
ELSE @String
END
PRINT '==='
GO
輸出:
test-1
91-150 days
91
90
===
test-2
90
===
的MySQL或MS SQL Server? – jarlh
SQL Server管理工作室2014. – Mogli
在你的例子中該案件的輸出應該是什麼? –