SQL与双管连接一样

时间:2016-09-12 15:21:53

标签: mysql sql sql-server

我遇到的SQL查询问题必须与包含所有用户用户名的列中的用户的用户名相匹配。

因此该列将包含以下内容:

SELECT * FROM myTable WHERE CONCATUSERS LIKE ('%|' || 'USER1' || '|%')

用户左侧和右侧都有管道,以防止“USER1”在“USER11”中匹配。

我的查询是

(echo: subject: test; echo) | /usr/sbin/sendmail -v -Am -i info@example.com

请注意,查询中的USER1是从我们的代码生成的变量,所以我必须保留连接语法,我也必须使用标准语法(代码将在mySQL,SQLServer等中运行。

那么在LIKE子句中连接字符串的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

MySQL使用双管进行连接。您可以使用SQL Server +。

SELECT * 
FROM myTable
WHERE CONCATUSERS LIKE ('%' + '|user1|' + '%')

答案 1 :(得分:0)

使用CONCAT。 (可在SQL Server 2012及更高版本上使用)

它的好处是它隐式转换类型以将值添加到字符串。它不仅仅适用于Sql Server和MySql。

SELECT * FROM myTable WHERE CONCATUSERS LIKE CONCAT('%|','USER1','|%');

请注意,如果其中一个连接值为NULL,则结果将为NULL。但不是在Sql Server上。

只有Oracle允许2个值才能使用该功能,这只是甲骨文的顽固。
因此,如果SQL需要在MySQL,最近的Sql Server和Oracle上运行不变,那么这应该可行:

SELECT * FROM myTable WHERE CONCATUSERS LIKE CONCAT(CONCAT('%|','USER1'),'|%');

答案 2 :(得分:0)

您可以使用CONCAT功能。 因为SQL和MySQL都支持它

SELECT * 
FROM xpat
WHERE plname LIKE concat('%' ,'|user1|' ,'%');