我这里有三个字段的样本表。
TableA
FieldA FieldB FieldC
======================================
123XYZ456 XYZ John
124NNN333 NNN Jenny
232XPT124 XPT Jade
456XXX345 XXX James
FieldA
的固定长度为9.我没有设计此表,有些应用程序已经在使用它。
我想选择FieldB
和FieldC
,条件为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 = ''
,那么它应该没有结果。要获取字段(FieldB
,FieldC
),我需要paramA = '123'
和paramB = '456'
的正确值,以便它返回XYZ
和John
。如果我想返回James
,那么我必须提供paramA = '456'
和paramB = '345'
我怎样才能为此正确构建SQL语句?任何的想法?感谢。
答案 0 :(得分:16)
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'");
结果:家园