gpt4 book ai didi

sql-server - 如何在不使用存储过程的情况下将 varchar contents(1,2,3) 数据转换为 SQL 中的整数数组?

转载 作者:行者123 更新时间:2023-12-05 03:11:38 25 4
gpt4 key购买 nike

我有两个表,名为 tblfilmstblfilmdetails

第一个表 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com