在SQL LIKE中使用变量和模式匹配

问题描述 投票:0回答:1

我有一个sql表,其中'Action'中的一列是nvarchar(max)。此列可以包含HelloKitty_1.MP4或HeMan_2.MP4或SpiderMan_1.MP4,Hulk_4.MP4等值。这里1,2,1是我所说的videoIndex。

我在SQL中编写一个存储过程,我传入了videoIndex(int),它返回了包含该索引的所有行。所以在上面的例子中,如果传入1,它应该返回HelloKitty_1.MP4和SpiderMan_1.MP4。

我做了以下代码片段,但是我收到此错误“将varchar值'%_'转换为数据类型int时转换失败。”

DECLARE @SearchPattern varchar(40)  
SET @SearchPattern = '%' + '_' + @videoindex + '.MP4'  

DECLARE @WatchVideoCount int;  
SET @WatchVideoCount =   
     (SELECT count(*)
     FROM [dbo].[VideoWatched]
     WHERE 
     [Action] LIKE @SearchPattern)  

SELECT @WatchVideoCount as TotalTimesUsersWatchedVideo, @videoindex as videoIndex
sql-server tsql sql-like
1个回答
0
投票

修改这个:

SET @SearchPattern = '%' + '_' + @videoindex + '.MP4'

成为:

SET @SearchPattern = '%' + '_' + CAST(@videoindex AS varchar(30)) + '.MP4'

或者你可以使用

SET @SearchPattern = CONCAT('%' , '_' , @videoindex , '.MP4')
© www.soinside.com 2019 - 2024. All rights reserved.