2014-03-13 47 views
1

我有一个包含名为groupid和组名的字段的数据库。如何在sql查询中正确使用LIKE语句

样本数据

groupid groupname 
123   abc 
234   bcr 
1237   cde 

我喜欢与其它输入的数据进行比较的groupid,其尺寸大于分组ID的大小更大。

我尝试了查询无法返回正确的答案

SELECT * 
    FROM mydata 
WHERE groupid LIKE '12309098'; 

我预期的答案是abc

什么是正确答案提前做出

感谢变化

+0

你需要在年底与使用像%%在开始与结束与开始,并%,而两侧为包含 – Rex

+0

'LIKE'是不是有些神奇statetment它会识别模式。它可以查找字符串。 'LIKE'123%''会返回第一组,但也是第三组。 – SchmitzIT

+0

我不认为LIKE会在你的情况下工作 – Nilesh

回答

8

由于你希望行中的值是输入的前缀,而不是其他方式,你可以将LIKE围绕另一条路;

SELECT * 
FROM mydata 
WHERE '12309098' LIKE CONCAT(groupid, '%'); 

An SQLfiddle to test with;

编辑:既然你问了SQLite,那么你需要使用||进行连接;

SELECT * 
FROM mydata 
WHERE '12309098' LIKE `groupid` || '%'; 

Another SQLfiddle

+1

聪明!有+1。 – SchmitzIT

+0

@joachim只是出于好奇,Concat如何在这里工作 – Rex

+0

@Rex它将行值'123'与'%'连接形成'123%',这是一个与'12309098'匹配的类似模式作为前缀。 –

6

你可以做象下面这样:

SELECT * 
FROM my data 
WHERE '12309098' LIKE CONCAT('%', groupid, '%'); 
+0

只是出于好奇,Concat在这里工作如何 – Rex

+0

@Rex它用于连接字符串。 – xdazz

+0

@Rex在'groupID'前后追加'%' – SchmitzIT

0

如果您确信输入的数据将与123开始,然后:

SELECT * FROM mydata WHERE groupid LIKE '123%'; 

如果您确信输入数据将包含123,则:

SELECT * FROM mydata WHERE groupid LIKE '%123%'; 
+0

我发现约阿希姆Isaksson的解决方案最适合我。任何方式谢谢 – Riskhan

1

你可以使用类似这样的东西。但它对你的SQL Server是非常主观的。对于Oracle以下语法应该罚款

SELECT * 
    FROM mydata 
WHERE groupid LIKE SUBSTR('12309098',1, LENGTH(groupid)); 
+1

我与Joachim Isaksson的解决方案。不管怎样,谢谢 – Riskhan