使用Sybase SQL Anywhere拆分/爆炸逗号分隔的字符串
拜见英文谜底 > How do I split a string so I can access item x?41个
我有字段id_list =’1234,23,56,576,1231,567,122,87876,57553,1216′ 我想用它来搜刮这个字段: SELECT * FROM table1 WHERE id IN (id_list) > id是整数 可是这样做不起浸染,以是我必要以某种方法将id_list拆分成select查询. 我应该在这里行使什么办理方案我正在行使T-SQL Sybase ASA 9数据库(SQL Anywhere). 我看到这个,就是用while轮回建设本身的函数, 办理要领这可以在不行使动态SQL的环境下完成,但您必要建设一些支持工具.第一个工具是一个表值函数,它将理会您的字符串并返回一个整数表.第二个工具是一个存储进程,它将具有一个参数,您可以在个中转达字符串(id_list),将其理会为表,然后最终将其毗连到您的查询.起首,建设理会字符串的函数: CREATE FUNCTION [dbo].[String_To_Int_Table] ( @list NVARCHAR(1024),@delimiter NCHAR(1) = ',' --Defaults to CSV ) RETURNS @tableList TABLE( value INT ) AS BEGIN DECLARE @value NVARCHAR(11) DECLARE @position INT SET @list = LTRIM(RTRIM(@list))+ ',' SET @position = CHARINDEX(@delimiter,@list,1) IF REPLACE(@list,@delimiter,'') <> '' BEGIN WHILE @position > 0 BEGIN SET @value = LTRIM(RTRIM(LEFT(@list,@position - 1))); INSERT INTO @tableList (value) VALUES (cast(@value as int)); SET @list = RIGHT(@list,LEN(@list) - @position); SET @position = CHARINDEX(@delimiter,1); END END RETURN END 此刻建设存储进程: CREATE PROCEDURE ParseListExample @id_list as nvarchar(1024) AS BEGIN SET NOCOUNT ON; --create a temp table to hold the list of ids CREATE TABLE #idTable (ID INT); -- use the table valued function to parse the ids into a table. INSERT INTO #idTable(ID) SELECT Value FROM dbo.String_to_int_table(@id_list,','); -- join the temp table of ids to the table you want to query... SELECT T1.* FROM table1 T1 JOIN #idTable T2 on T1.ID = T2.ID 执行示例: exec ParseListExample @id_list='1234,1216' 我但愿这有辅佐… (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |