I have field id_list='1234,23,56,576,1231,567,122,87876,57553,1216'
and I want to use it to search IN this field:
SELECT *
FROM table1
WHERE id IN (id_list)
idisintegerid_listisvarchar/text
But in this way this doesn't work, so I need in some way to split id_list into select query.
What solution should I use here? I'm using the T-SQL Sybase ASA 9 database (SQL Anywhere).
But in this way this doesn't work, so I need in some way to split id_list into select query.
Way I see this, is to create own function with while loop through, and each element extract based on split by delimiter position search, then insert elements into temp table which function will return as result.
COMMENTS TO Sebastian Meine ANSWER AND HIS SOLUTIONS :
Sybase SQL Anywhere 9
sa_split_listsystem procedure not exist here, so it doesn't work
CASTworks greatSybase SQL Anywhere 12
sa_split_listsystem procedure exist and works great
CASTworks greatFor the Sybase SQL Anywhere 9 I have made sa_split_list system procedure replacement:
CREATE PROCEDURE str_split_list(in str long varchar, in delim char(10) default ',') RESULT( line_num integer, row_value long varchar) BEGIN DECLARE str2 long varchar; DECLARE position integer; CREATE TABLE #str_split_list ( line_num integer DEFAULT AUTOINCREMENT, row_value long varchar null, primary key(line_num)); SET str = TRIM(str)+delim; SET position = CHARINDEX(delim, str); separaterows: WHILE position > 0 loop SET str2 = TRIM(LEFT(str, position - 1)); INSERT INTO #str_split_list (row_value) VALUES (str2); SET str = RIGHT(str, LENGTH(str) - position); SET position = CHARINDEX(delim, str); end loop separaterows; select * from #str_split_list order by line_num asc; ENDExecute the same way as sa_split_list:
select * from str_split_list('1234,23,56,576,1231,567,122,87876,57553,1216')