【问题标题】:PostgreSQL+NHibernate -> named parameter in LIKE sectionPostgreSQL+NHibernate -> LIKE 部分中的命名参数
【发布时间】:2012-07-18 11:42:25
【问题描述】:

在 Spring+Hibernate 应用程序中,我尝试使用命名参数传递 查询应将保存在数据库中的 xml 文档中的值作为文本求和。

    SELECT  document_type, 
     SUM(CAST(substring(document_content ,'<ab.*>(.*[0-9])</ab>') as float)) as value, COUNT(*)
     FROM  statistic_data_test 
     WHERE column LIKE :param1::text
     GROUP BY document_type 
     ORDER BY value DESC 

param1 是通过 URL 传递给程序的命名参数。 整个查询和参数名称由用户动态创建。

上面显示的代码工作正常,但我不仅需要找到完全匹配的能力,而且我不能在查询中连接字符串。 现在,在代码的一部分中,我正在检查类型是否为文本,如果是,我添加 % 标记作为后缀和前缀。

我不会将 % 标记从参数移动到查询字符串,但是像

WHERE column LIKE '%'+:param1::text+'%'

转错

怎么做?如何在查询中连接字符串?

【问题讨论】:

    标签: string postgresql nhibernate sql-like named-parameters


    【解决方案1】:

    改变策略,保持目标。

    使用position 函数。

    position(:param1::text in column) <> o
    

    【讨论】:

    • 谢谢,它看起来是我要找的东西;)但是有没有办法检查除了参数在列中是否没有别的东西? LIKE ofc 无法完成,但最好使用一种方法。
    • @T.G - 好吧,LIKE 可以简单地通过不包含百分号来做到这一点,但是如果您不只是使用 = 来完成这项工作,那么您将在任何更大的数据上遭受重大的性能影响.钉子用锤子,螺丝用螺丝刀。
    猜你喜欢
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    相关资源
    最近更新 更多