簡體   English   中英

在 SQL 中選擇一個字符出現多次的值

[英]Selecting values with more than one occurrence of a character in SQL

讓我用一個例子來解釋我的問題

考慮以下值列

City
-------
Chennai
Delhi
Mumbai

我想要的輸出是

City
-------
Chennai
Mumbai

當您查看值時,“Chennai”有兩個“N”,“Mumbai”有兩個“M”

查找滿足上述條件的值的查詢是什么

我正在使用 MySQL

您可能可以使用此處的某些邏輯,然后進行這種過濾計數一欄中所有不同字符的出現

你能嘗試一下嗎 如果需要,您可以創建函數並接受動態值並傳遞給相應的函數

IF(LEN('Chennai')-LEN(REPLACE('Chennai', 'N', ''))>1 )
 Select 'Chennai'

如果城市名稱僅包含拉丁字符,則可能的解決方案

SELECT DISTINCT city
 FROM table1 c CROSS JOIN
(
   SELECT 0 n UNION ALL
   SELECT a.N + b.N * 5 + 1 n
     FROM 
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) a
   ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) b
    ORDER BY n
) n
  WHERE CHAR_LENGTH(city) - CHAR_LENGTH(REPLACE(LOWER(city), CHAR(97 + n.n), '')) > 1

輸出:

|    CITY |
|---------|
|  Mumbai |
| Chennai |

這是SQLFiddle演示

您可以為此使用存儲過程。 請檢查我的代碼 -

創建表語句 -

CREATE TABLE `Cities` (
  `City` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

將城市添加到表中並創建程序 -

CREATE PROCEDURE `SP_SplitString`()
BEGIN
   DECLARE front TEXT DEFAULT NULL;
   DECLARE count INT DEFAULT 0;
   DECLARE arrayText longtext default "";
   DECLARE Value longtext DEFAULT "";
   DECLARE val longtext DEFAULT "";
   DECLARE done INT DEFAULT FALSE;
   DECLARE cityCursor CURSOR FOR SELECT * FROM `Cities`;
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

   OPEN cityCursor;
   loop_through_rows:
   LOOP  
   FETCH cityCursor INTO Value;

   IF done THEN
      LEAVE loop_through_rows;
   END IF;

   SET val = Value;
   iterator:
   LOOP 
     IF LENGTH(TRIM(val)) = 0 OR val IS NULL THEN
       LEAVE iterator;
     END IF;
     SET front = LOWER(SUBSTRING(val,1,1));


     SET count = LENGTH(Value) - LENGTH(REPLACE(LOWER(Value), front, ''));


     IF count > 1 THEN
       IF LENGTH(TRIM(arrayText)) = 0 THEN
         SET arrayText = Value;
       ELSE
         SET arrayText = CONCAT(arrayText,",",Value);
       END IF;
       LEAVE iterator;
     END IF;
     IF LENGTH(TRIM(val)) > 1 THEN
       SET val = SUBSTRING(val,2,LENGTH(TRIM(val)));
     ELSE
       SET val = "";
     END IF;

   END LOOP;
   END LOOP;

SELECT * FROM `Cities` WHERE FIND_IN_SET(City, arrayText);

END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM