web-dev-qa-db-fra.com

Rechercher si l'une des lignes correspond partiellement à une chaîne

Je veux voir si une table contient une sous-chaîne d'une chaîne donnée.

Disons que j'ai une chaîne

somedomain.com 

Dans la base de données, j'ai:

blabladomain.com
testdomain.com
domain.com

J'ai besoin de faire une requête qui retournera "domain.com" car c'est une sous-chaîne de "somedomain.com".

Je ne sais pas si c'est même possible dans MySQL.

CREATE TABLE `site_core_antispam_banned_domain` (
`domain_id` int(11) NOT NULL AUTO_INCREMENT,
`domain_name` varchar(255) NOT NULL,
PRIMARY KEY (`domain_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
6
Emanuel

Vous pouvez utiliser LOCATE() - comme dans l'autre réponse - ou LIKE:

SELECT * 
FROM site_core_antispam_banned_domain
WHERE 'subdomain.com' LIKE CONCAT('%', domain_name, '%') ;

Ce qui précède recherchera les domaines qui correspondent à n'importe quelle partie d'une chaîne donnée. Si vous vouliez spécifiquement des domaines correspondant à côté droit de la chaîne (par exemple, si le domaine à comparer était somedomain.com.ro et vous étiez uniquement intéressé par *.com.ro résultats), vous pouvez préciser le modèle:

SELECT * 
FROM site_core_antispam_banned_domain
WHERE 'subdomain.com' LIKE CONCAT('%', domain_name) ;
8
ypercubeᵀᴹ

Je pense que tout ce dont vous avez besoin est une fonction Locate dans MySQL comme:

SELECT domain_id,domain_name as a 
FROM site_core_antispam_banned_domain 
where Locate(domain_name,'subdomain.com')!=0;

J'espère que cela t'aides.

3
Tayyab

Essayez-le:

 SELECT * 
 FROM site_core_antispam_banned_domain
 WHERE RIGHT(domain_name,10)='domain.com';
2
Pankaj Kumar

Utilisez LIKE. Pour rechercher une sous-chaîne située dans n'importe quelle partie de la chaîne:

SELECT domain FROM mytable WHERE domain LIKE '%domain.com%';

Cela fera ce que vous avez demandé. Mais dans vos exemples, "domain.com" est toujours à la fin de la chaîne. Pour rechercher des chaînes se terminant par une certaine sous-chaîne:

column LIKE '%substring'

Notez que LIKE n'est pas sensible à la casse. Si vous souhaitez effectuer une recherche sensible à la casse, remplacez LIKE par LIKE BINARY.

2
Federico Razzoli