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 grande

Sybase sql ovunque 12

  • sa_split_list La procedura di sistema esiste e funziona alla grande

  • CAST funziona alla grande

Per 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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top