我遇到的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子句中连接字符串的正确方法是什么?
答案 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|' ,'%');