【问题标题】:How Can I Extract a Substring in WHERE Clause of <CFQUERY>?如何在 <CFQUERY> 的 WHERE 子句中提取子字符串?
【发布时间】:2014-07-08 08:04:30
【问题描述】:

是否可以在 ColdFusion 的 WHERE 子句中提取子字符串或在查询的查询中提取子字符串?例如,我正在尝试使用以下查询来查找域为“comcast.net”的所有电子邮件地址(即电子邮件地址中“@”之后的所有内容)。我正在查询一个 MS-Access 数据库表。

<cfquery name="test" datasource="membership">
      SELECT email_address
      FROM tblMembers
      WHERE MID(email_address, INSTR(email_address, '@') + 1) = 'comcast.net'
</cfquery>

如果我尝试将此作为查询,我会收到错误消息“[Macromedia][SequeLink JDBC Driver][ODBC Socket][Microsoft][ODBC Microsoft Access Driver] 条件表达式中的数据类型不匹配。”

如果我尝试将其作为查询的查询,我会收到错误消息“遇到“MID (email1,. Incorrect conditional expression, Expected one of [like|null|between|in|comparison] 条件”。

如果您能帮我找到有用的东西,我将不胜感激!感谢您的帮助!

【问题讨论】:

  • 你能修剪字段并使用正确的 x 字符吗?
  • Access 不支持like 我不认为,但它支持通配符。为什么不使用 where email_address = %comcast.net 之类的东西,或者如果它确实支持 likewhere email_address like '%comcast.net'
  • Access 支持like

标签: sql ms-access coldfusion


【解决方案1】:

您可以使用right() 函数来完成此操作。如果您在将其放入数据库时​​没有去除尾随空格,您也可以使用trim 函数

<cfquery name="test" datasource="membership">
  SELECT email_address
  FROM tblMembers
  WHERE right(email_address, 11) = 'comcast.net'
</cfquery>

您也可以使用like 运算符,但很可能上述选项更快。

<cfquery name="test" datasource="membership">
  SELECT email_address
  FROM tblMembers
  WHERE email_address LIKE '*comcast.net'
</cfquery>

如果它们是用户提供的东西,请确保您对所有值使用 cfqueryparam

【讨论】:

  • 为什么你认为 right() 比 like 快?此外,即使数据不是来自用户,查询参数也有好处。
猜你喜欢
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多