在WHERE子句中使用substr的SELECT语句

时间:2012-03-09 03:16:55

标签: mysql sql

我这里有三个字段的样本表。

TableA

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

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

我想选择FieldBFieldC,条件为FieldA

使用这个sql语句:

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

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

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

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

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

我怎样才能为此正确构建SQL语句?任何的想法?感谢。

4 个答案:

答案 0 :(得分:16)

使用LEFT()RIGHT()

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

答案 1 :(得分:4)

SELECT Field2,Field3
FROM TABLE
WHERE SUBSTR(Field1,1,3)='123' AND SUBSTR(Field1,7,3)='456'

答案 2 :(得分:1)

你还没有说清楚为什么你甚至允许paramB在你的输入验证中是空白的,但要获得你所描述的确切行为,你可以检查一下这种情况,即:

WHERE  @paramA!='' AND @paramB!='' AND FieldA LIKE Concat(@paramA, '%', @paramB) 

答案 3 :(得分:0)

像这样:例如分类表:美国的房屋,美国的土地等。

mysql_query("select classification from properties where LEFT(classification, 5) = 'Homes'");

结果:家园