作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个表,名为 tblfilms
和 tblfilmdetails
。
第一个表 tblfilm
列和数据。
categoryID filmCodes
---------- ----------
1 1,2,3
2 4,5,6
第二个表 tblfilmdetails
列和数据。
filmCode filmName
-------- ----------
1 Kungfu Panda
2 Inside out
3 Karate Kid
4 Terminator
5 Jumanji
6 Batman
我需要从 tblfilmdetails
表中获取 filmName
,其中 categoryID
等于 1。
我已经尝试了下面的查询来实现它但是它显示错误
select filmname from tblfilmdetails where filmCode in (select filmCodes from tblfilm where categoryID=1)
问题是因为我的 filmCodes
列是 varchar
数据,所以它返回错误,无法将 varchar
转换为 整数
。
我如何实现这一点?
由于某些其他原因,我不想使用存储过程。
最佳答案
首先你需要有Split功能和下面简单查询的使用
拆分函数
FUNCTION [dbo].[Split](@String nvarchar(4000), @Delimiter char(1))
RETURNS @Results TABLE (ITEM nvarchar(4000))
AS
BEGIN
DECLARE @StartIndex INT,
@EndIndex INT
SET @StartIndex = 1
IF SUBSTRING(@String, LEN(@String) - 1, LEN(@String)) <> @Delimiter
BEGIN
SET @String = @String + @Delimiter
END
WHILE CHARINDEX(@Delimiter, @String) > 0
BEGIN
SET @EndIndex = CHARINDEX(@Delimiter, @String)
INSERT INTO @Results(ITEM)
SELECT RTRIM(LTRIM(SUBSTRING(@String, @StartIndex, @EndIndex - 1)))
SET @String = SUBSTRING(@String, @EndIndex + 1, LEN(@String))
END
RETURN
END
SQL 查询
SELECT *
FROM tblfilms AS M
CROSS APPLY dbo.Split(M.filmCodes,',') AS T
INNER JOIN tblfilmdetails AS G ON G.filmCode = CAST(T.ITEM AS int)
WHERE M.categoryID = 1
关于sql-server - 如何在不使用存储过程的情况下将 varchar contents(1,2,3) 数据转换为 SQL 中的整数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36541579/
我是一名优秀的程序员,十分优秀!