我正在使用通过string.Format (query, id, batch)
提供参数的查询,也正在使用REGEXP_LIKE(A.NI,'^\d{13}$')
将选择限制为只能在NI列中找到的13位数字,这是因为花括号适合字符串中的参数.Format(),我的正则表达式{13} 在这里也被视为参数,并获得
索引(从零开始)必须大于或等于零且小于 参数列表的大小。
如何处理此问题; 我的查询看起来像这样;
SELECT B.ID,
B.NI,
B.NT,
{1},
B.MB,
SYSDATE
FROM (SELECT A.*
FROM core_table A
WHERE A.batch_id = {0} AND
(REGEXP_LIKE(A.NI,'^\d{13}$') OR
REGEXP_LIKE(A.NT,'^\d{7}$') OR
REGEXP_LIKE(A.MB,'^\d{11}$'))) B
WHERE B.BAT_ID = {0} AND
B.IS_DELETED = 0;
答案 0 :(得分:1)
您使用string.Format
来填充值{0}和{1}。
这将引发异常,因为您的字符串包含{13},{7},{11},并且.NET认为它们是占位符,例如{0},{1}。
您应该用双{{
和}}
来固定字符串。查看有效的代码:
https://dotnetfiddle.net/TG8Wa7
string query = @"SELECT B.ID,B.NI,B.NT,{1},B.MB, SYSDATE FROM (SELECT A.*from core_table A where A.batch_id={0} AND (REGEXP_LIKE(A.NI,'^\d{{13}}$') OR REGEXP_LIKE(A.NT,'^\d{{7}}$') OR REGEXP_LIKE(A.MB,'^\d{{11}}$'))) B where B.BAT_ID={0} AND B.IS_DELETED=0;";
string.Format(query, "1","2");