mysql - WHERE 子句中带有 substr 的 SELECT 语句

标签 mysql sql

我这里有包含三个字段的示例表。

TableA

    FieldA        FieldB        FieldC
    ======================================
    123XYZ456     XYZ           John
    124NNN333     NNN           Jenny
    232XPT124     XPT           Jade
    456XXX345     XXX           James

FieldA 的固定长度为 9。我没有设计这个表,一些应用程序已经在使用它。

我想根据 FieldA 的条件选择 FieldBFieldC

使用这条sql语句:

SELECT FieldB, 
       FieldC
FROM   TableA
WHERE  FieldA LIKE Concat(@paramA, '%', @paramB) 

我无法达到我想要的结果。当我尝试使用 12 的 paramA 值和 '' 的 paramB 值进行搜索时,我得到了 2 结果:

    FieldA        FieldB        FieldC
    ======================================
    123XXX456     XXX           John
    124XXX333     XXX           Jenny

因为它显然与 12% 匹配,而这不是我想要的。我希望参数应该匹配字符串的正确索引。

如果我搜索 paramA = '12'paramB = '' 那么它应该没有结果。要获取字段(FieldBFieldC),我需要 paramA = '123'paramB = '456 的正确值' 所以它将返回 XYZJohn。如果我想返回 James,那么我必须提供 paramA = '456'paramB = '345'

我如何正确地为此构建 SQL 语句?任何想法?谢谢。

最佳答案

使用LEFT()RIGHT() :

SELECT FieldB, FieldC
FROM   TableA
WHERE  LEFT(FieldA,3) = @paramA 
       AND RIGHT(FieldA,3) = @paramB;

关于mysql - WHERE 子句中带有 substr 的 SELECT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9628460/

相关文章:

单独的数据库类中的 MySQL 连接池 - 如何?

mysql - ODBC 如何存储可变长度的字符串数组?

SQL 日期逻辑 - 查找之前的*非标准*季度

php - 拉维尔 4 : How to Change Laravel getQueryLog to complete SQL command

mysql - SQL 查询产生错误的计数结果

php - 如何显示内部连接表中的必填字段

sql - SQL合并两个不同表的数据

c# - 在同一个 SqlDataReader 上混合异步和非异步调用是否存在任何已知问题?

asp.net - 停止用户输入'char

php - 在 mySQL 数据库中存储图像的问题