使用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' 我希望这有帮助… (编辑:海洋资讯信息网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 

