我一直在尝试将逗号分隔的字符串“5430,5456,5450”转换为逗号分隔的整数,字符串的长度是变化的,并在存储过程中使用它作为参数来查询列route_id为的数据库数字类型。
我看过一些例子,但似乎没有任何效果。这些是参数和查询:
P_business_date IN VARCHAR2,
P_route_ids IN VARCHAR2
SELECT rt.route_id , rt.route_name, i.data_file_name, i.bus_date, stdesc.status_code, i.batch_in_id In_Id , i.modified_date In_Time
FROM gthdba.gth_in_batch i , gthdba.gth_route rt , gthdba.gth_route_source_status st , gthdba.gth_status stdesc
WHERE rt.route_id = i.route_id
AND rt.route_id = st.route_id
AND st.run_seq_no = i.run_seq_no
AND stdesc.status_id = st.status_Id
AND i.bus_date = to_date (''' || P_business_date || ''','' YYYYMMDD'')
AND RT.ROUTE_ID IN (''' || P_route_ids || ''')
AND i.modified_date > to_date (''' || P_business_date || '',''YYYYMMDD '')
ORDER BY IN_ID DESC, ROUTE_ID';
谢谢
最佳答案
最初的解决方案无法工作,因为如果 string1 == string2,string1 in (string2)
返回 true。 (顺便说一句,它可以修改为“动态 SQL”,如果您愿意,可以尝试一下)。
快速但不是最快的解决方案是:
SELECT ...
FROM ...
AND i.bus_date = to_date (P_business_date,'YYYYMMDD')
AND INSTR(''' || P_route_ids || ''', ''' || RT.ROUTE_ID || ''') != 0
AND i.modified_date > to_date (P_business_date,'YYYYMMDD')
ORDER BY IN_ID DESC, ROUTE_ID';
INSTR函数返回输入字符串中的子字符串位置。
例如,一条路由的 ID 为 10
,参数为 10,20,30
:
instr(',10,20,30,', ',10,') != 0
并且将选择路线。
关于sql - 如何将逗号分隔的字符串转换为逗号分隔的整数并将其作为 Oracle 中的参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25381209/