ASK sql substring用于版本值

时间:2012-02-21 04:19:37

标签: sql sql-server tsql

我查询了更新我的值的版本,这里是代码

DECLARE @inParam AS VARCHAR(50) = '80003689_CST_20120118'
DECLARE @file_extension varchar(50)='.xlsx'
DECLARE @lastVer AS VARCHAR(50)
DECLARE @nextVer AS INT 
DECLARE @combine AS VARCHAR(50) 

SELECT @lastVer = MAX([File_Name]) 
  FROM dbo.Uploaded_File 
 WHERE [File_Name] LIKE @inParam+'%'

SELECT @nextVer = CAST(SUBSTRING(@lastVer,LEN(@inParam) + 6, 1) AS INT) + 1

SELECT @combine = @inParam + '(' + CONVERT(VARCHAR, @nextVer) + ')' + @file_extension

SELECT @lastVer, @nextVer, @combine

问题是当值80003689_CST_20120118(1)时,它没有更新版本,结果我有80003689_CST_20120118(1)(1) ...

但我希望结果变为80003689_CST_20120118(2)

所以,如果我有相同的价值,它将成为:

80003689_CST_20120118
80003689_CST_20120118(1)
80003689_CST_20120118(2)

@Dimitri回答.. 但我不能标记他的回答..它的givin错误页面在我身上...... 谢谢迪米特里

2 个答案:

答案 0 :(得分:4)

我认为它现在有效:

DECLARE @inParam AS VARCHAR(50) = '80003689_CST_20120118'
declare @file_extension varchar(50)='.xlsx'
DECLARE @lastVer AS VARCHAR(50)
DECLARE @nextVer AS INT 
DECLARE @combine AS VARCHAR(50) 

SELECT @lastVer = MAX(CAST(SUBSTRING([File_Name], LEN(@inParam)+2, LEN([File_Name]) - LEN(@inParam) - 2) AS INT))
FROM dbo.Uploaded_File 
WHERE [File_Name] LIKE @inParam+'(%)'

SELECT @nextVer = ISNULL(@lastVer, 0) + 1
SELECT @combine =  @inParam + '(' + CONVERT(VARCHAR, @nextVer) + ')' + @file_extension
SELECT @lastVer,@nextVer,@combine

答案 1 :(得分:1)

这是我的测试片段(它不需要db表)。你能更新它来重现错误吗?

DECLARE @inParam AS VARCHAR(50) = '80003689_CST_20120118'
declare @file_extension varchar(50)='.xlsx'
DECLARE @lastVer AS VARCHAR(50)
DECLARE @nextVer AS INT 
DECLARE @combine AS VARCHAR(50) 

create table #Uploaded_File ( [File_Name] varchar(max) )
insert into #Uploaded_File values( @inParam + '(3)' )
insert into #Uploaded_File values( @inParam + '(22)' )
insert into #Uploaded_File values( @inParam + '(1)' )
insert into #Uploaded_File values( @inParam + '(50)' )

SELECT @lastVer = MAX(CAST(SUBSTRING([File_Name], LEN(@inParam)+2, LEN([File_Name]) - LEN(@inParam) - 2) AS INT))
FROM #Uploaded_File 
WHERE [File_Name] LIKE @inParam+'(%)'

SELECT @nextVer = ISNULL(@lastVer, 0) + 1
SELECT @combine =  @inParam + '(' + CONVERT(VARCHAR, @nextVer) + ')' + @file_extension
SELECT @lastVer,@nextVer,@combine

drop table #Uploaded_File