このような番号のリストを使用しようとしています。SQLの開発者でvarcharを数値に変換する方法
SELECT *
FROM users
WHERE id in (list_of_ids)
これは、SQLプロシージャと変数「list_of_ids」の部分がvarchar型であり、それは、このようなIDが含まれています1,2,3,4,5 ........ がどのように使用することができますこのリストとこのクエリ
このような番号のリストを使用しようとしています。SQLの開発者でvarcharを数値に変換する方法
SELECT *
FROM users
WHERE id in (list_of_ids)
これは、SQLプロシージャと変数「list_of_ids」の部分がvarchar型であり、それは、このようなIDが含まれています1,2,3,4,5 ........ がどのように使用することができますこのリストとこのクエリ
これも試してみてください。これは、作成するために追加の機能を必要としないため、より良い解決策になる可能性があります。 oracle regexp_substrは、カンマ区切り値を異なる行に分割し、問合せに渡します。
SELECT *
FROM users
WHERE id in
(SELECT regexp_substr(list_of_ids,'[^,]+', 1, level) FROM dual
connect by regexp_substr(list_of_ids, '[^,]+', 1, level) is not NULL)
あなたはこのPL/SQLブロックのように、SQLクエリを構築するために、REFカーソルを使用することができます。
declare
list_of_ids varchar2(100) := '1,3,4'; -- example
c_cursor sys_refcursor;
result number;
begin
open c_cursor for ('SELECT id '||
'FROM users '||
'WHERE id in ('||list_of_ids||')'
);
fetch c_cursor into result;
while c_cursor%found
loop
dbms_output.put_line('ID='||to_char(result));
fetch c_cursor into result;
end loop;
close c_cursor;
end;
/
のプロジェクトで、このソリューションをお試しください。
テーブルを返す新しいユーザー関数を追加します。
コードは以下の通りです:その後、
CREATE FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter
varchar(20) = ' ')
RETURNS @Strings TABLE
(
position int IDENTITY PRIMARY KEY,
value varchar(8000)
)
AS
BEGIN
DECLARE @index int
SET @index = -1
WHILE (LEN(@text) > 0)
BEGIN
SET @index = CHARINDEX(@delimiter , @text)
IF (@index = 0) AND (LEN(@text) > 0)
BEGIN
INSERT INTO @Strings VALUES (@text)
BREAK
END
IF (@index > 1)
BEGIN
INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))
SET @text = RIGHT(@text, (LEN(@text) - @index))
END
ELSE
SET @text = RIGHT(@text, (LEN(@text) - @index))
END
RETURN
END
、以下のようなあなたのストアドプロシージャからそれを呼び出します。
DECLARE @list_of_ids AS VARCHAR(100)
SET @list_of_ids = '1,2,3,4,5,6,7,8,9,10,'
SELECT *
FROM users
WHERE id in (SELECT value FROM dbo.fn_Split(@list_of_ids,','))
-1、これはOracle PL/SQLではありません。 – Ben
SQL Serverのテーブル値関数のように見えます。ここでは、oracleに相当する例を示します。しかし、@ NoRulesの答えはよりエレガントに見えます。 Microsoft側でregexp_substrを使用して欲しいと願っています。 http://decipherinfosys.wordpress.com/2008/10/27/returning-a-record-set-from-a-function-in-oracle-sql-server-and-db2/ –
これは非常にクールなトリックです! –