Dividere/esplodere il campo stringa delimitato da virgola in query SQL
-
01-11-2019 - |
Domanda
Ho un campo id_list='1234,23,56,576,1231,567,122,87876,57553,1216'
E voglio usarlo per cercare IN
questo campo:
SELECT *
FROM table1
WHERE id IN (id_list)
id
èinteger
id_list
èvarchar/text
Ma in questo modo questo non funziona, quindi ho bisogno in qualche modo per dividere id_list
In Select query.
Quale soluzione dovrei usare qui? Sto usando il database T-SQL SYBASE ASA 9 (SQL Anywhere). Ma in questo modo questo non funziona, quindi ho bisogno in qualche modo per dividere id_list
In Select query.
Il modo in cui lo vedo è quello di creare una propria funzione con While Loop attraverso e ogni estratto di elemento basato sulla ricerca di posizione divisa per delimitatore, quindi inserire elementi nella tabella Temp quale funzione tornerà come risultato.
Commenti a Sebastian Meine Risposta e alle sue soluzioni:
Sybase sql ovunque 9
sa_split_list
La procedura di sistema non esiste qui, quindi non funziona
CAST
funziona alla grandeSybase sql ovunque 12
sa_split_list
La procedura di sistema esiste e funziona alla grande
CAST
funziona alla grandePer Sybase SQL ovunque 9 ho realizzato SA_SPLIT_LIST Sistema Sostituzione:
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; END
Esegui allo stesso modo di SA_SPLIT_LIST:
select * from str_split_list('1234,23,56,576,1231,567,122,87876,57553,1216')
Nessuna soluzione corretta