regexp_like expression not working with variable
问题的原因是regexp_like
表达式不能与变量一起使用。解决方法是将正则表达式的元字符与变量隔离开来,通过连接两个部分来完成要求。使用'i'
选项可以忽略大小写敏感性。将以下代码放入查询中尝试解决问题:
test varchar(5); test := '1'; select * from timedetail where empnum = '013061361' and tsdate = '1-nov-13' and regexp_like(errors, test,'i'); --matches any string containing 1 --and regexp_like(errors,'^' || test,'i') --matches any string beginning 1 --and regexp_like(errors, test || '$','i') --matches any string ending 1 --and regexp_like(errors, '^' || test || '$','i') --matches any string exactly 1
regexp_like表达式与变量一起使用时不起作用的原因是因为变量被当作字符串处理。正确的语法应该是'[' || test || ']'。当尝试运行时,会出现“Test invalid identifier”的错误。这是由于在SQL中使用参数的方式因工具而异。在Oracle SQL Developer中,可以使用以下语法:stackoverflow.com/questions/5653423/…。而在SQL*Plus中,可以使用以下语法:docs.oracle.com/cd/B19306_01/server.102/b14357/ch5.htm。
使用Oracle作为DBMS,它是一个引擎。问题在于如何访问它?两个标准工具是SQL*Plus和Oracle SQL Developer。但还有其他工具,如TOAD、PL/SQL Developer等。SQL中的参数不是标准的一部分,所以每个人都可以自由实现它们。
如果这部分代码是在Python、C#或其他语言中,那么你将使用特定于驱动程序的绑定变量。
无论我使用什么前端,查询应该都能正常工作。
问题出在regexp_like的第二个参数中,其中使用了test。
我正在使用SQL Developer。
为了解决这个问题,我会使用Oracle SQL Developer的语法(因为在各种工具中更常见)。但这不是一个通用的解决方案。
我们可以在聊天中继续讨论。