La position actuelle:Accueil du site>Chaîne de séparation MySQL

Chaîne de séparation MySQL

2022-05-15 05:40:48Sirius 1222

Utilisermysql À traiter Chaîne avec virgule,Par exemple,: “1,2,3,4,5”,En colonnes

1
2
3
4
5

Traitement:

  J'ai cherché sur Internet,J'ai vérifié.,Il n'y a pas de moyen direct,Ça marche.help_topicTableau traité.Utiliserhelp_topicPour résoudre le problème du transfert de ligne et de colonne.

Souvent,:

 SELECT 
 SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num 
FROM 
 mysql.help_topic 
WHERE 
 help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1

Lancer à l'exécution locale,Erreur signalée:

Code d'erreur: 1142
SELECT command denied to user 'myDatabase' for table 'help_topic'

Au niveau localmysql J'ai vérifié.  help_topic  Tableaux

SELECT * FROM help_topic;

 Ce qui correspondh_id . Modifier l'énoncé ci - dessus :

 SELECT 
 SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',h_id+1),',',-1) AS num 
FROM 
  help_topic 
WHERE 
 h_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1

Obtenir les résultats souhaités.

Utilisation effective

  Fiche d'information sur les liens :

CREATE TABLE `tache_info`  (
  `tch_id` bigint(20) NOT NULL COMMENT 'Liensid', 
  `person` varchar(4000) COMMENT 'Personnel de traitement.Plusieurs virgules séparées',
  `created_date` datetime NULL DEFAULT NULL COMMENT ' Moment de création de la session ', 
  `finish_date` datetime NULL DEFAULT NULL COMMENT ' Fin de la session ',
  PRIMARY KEY (`tch_id`)
) COMMENT = ' Fiche d'information sur les liens ' ;

Exigences: Selon le personnel, Statistiques sur la rétention des liens :  Nombre total de liens de rétention 、 Durée moyenne du séjour ( Durée totale du séjour / Nombre total de liaisons )

Idées de traitement:

        1, Traitement du personnel : Le personnel est tache_info À l'intérieur.personChamp, Il pourrait y avoir plusieurs personnes à l'intérieur. , Plusieurs séparés par des virgules , Changement de ligne requis , Comme ça. .

        2, Calculer la durée du séjour : S'il reste ,finish_date C'est vide.,Avec “Heure actuelle- Temps de création de la phase ”:

mysql Calculer la différence de temps-En secondes

 SELECT TIMESTAMPDIFF(SECOND,t.`begin_date`,t.`finish_date`) diff_sec 
FROM tache_info t LIMIT 0 , 10;

Heure actuelle:

 SELECT TIMESTAMPDIFF(SECOND,t.`begin_date`, NOW()) diff_sec
 FROM tache_info t LIMIT 0 , 10;

Traitement:


 Insérer des données:

INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('1','1','0822-05-08 14:46:39','0822-05-08 14:46:39');
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('2','1','0822-05-08 14:46:42','0822-05-08 15:04:44');
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('3','22,33','0822-05-08 15:04:44',NULL);
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('4','44,55','0822-05-08 17:02:00',NULL);
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('5','22,33','0822-05-08 17:02:00',NULL);
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('6','44,55','0822-05-08 17:18:39',NULL);
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('7','66,77','0822-05-08 17:45:07',NULL);
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('8','55,66','0822-05-08 17:45:07',NULL);
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('9','55,66,77','0822-05-08 17:48:06',NULL);
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('10','55,66,33','0822-05-08 17:48:06',NULL);

Séparation des personnes et calcul du temps de rétention :

 SELECT t.`tch_id`, t.`created_date`, t.`finish_date`, 
TIMESTAMPDIFF(SECOND,t.`created_date`, NOW()) diff_sec,
	SUBSTRING_INDEX(
		SUBSTRING_INDEX(t.person,',',h_id + 1),',' ,- 1) deal_person
FROM
	help_topic, tache_info t
WHERE  h_id < (LENGTH(t.person)) - LENGTH(REPLACE (t.person, ',', '')) + 1 
AND finish_date IS NULL;

 

Compter le nombre total de liens de rétention individuels 、 Durée moyenne du séjour ( Durée totale du séjour / Nombre total de liaisons ):

SELECT COUNT(DISTINCT tch_id), SUM(diff_sec)/COUNT(DISTINCT tch_id), deal_person FROM (
 SELECT t.`tch_id`, t.`created_date`, t.`finish_date`, TIMESTAMPDIFF(SECOND,t.`created_date`, NOW()) diff_sec,
	SUBSTRING_INDEX(
		SUBSTRING_INDEX(t.person,',',h_id + 1),',' ,- 1) deal_person
FROM
	help_topic, tache_info t
WHERE  h_id < (LENGTH(t.person)) - LENGTH(REPLACE (t.person, ',', '')) + 1 
AND finish_date IS NULL
) AS tch_group GROUP BY deal_person;

Résumé:

        mysqlChaîne de séparation,À utiliserhelp_topic Les tableaux sont traités comme auxiliaires . Champs spécifiques , Écris - le en termes réels. .

Mentions de copyright
Auteur de cet article [Sirius 1222],Réimpression s’il vous plaît apporter le lien vers l’original, merci
https://fra.chowdera.com/2022/135/202205142240235641.html

Recommandé au hasard