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;
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) ;
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.
Essayez-le:
SELECT *
FROM site_core_antispam_banned_domain
WHERE RIGHT(domain_name,10)='domain.com';
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
.