SQL Noob 在這里。我正在為一個(希望如此)簡單的 SQL 查詢而苦苦掙扎,如果有人能幫助我理解我正在嘗試做的事情是否可能,我將不勝感激。我已經完成了 SQL 之外的任務,所以這只是我的好奇心。
任務很簡單。我有一張包含數百萬條代碼的表格。有 12 位代碼始終以“00000”及其 7 位等價物開頭。(如 000001234567 和 1234567)我需要識別在同一列中沒有等效 7 位代碼的所有 12 位代碼。請記住,可能還有其他 7 位代碼沒有 12 位等效代碼(例如 6789012)
任何幫助表示贊賞。
這是表的資料:
| 代碼 |
|---|
| 000001234567 |
| 1234567 |
| 000002345678 |
| 2345678 |
| 000003456789 |
| 000004567891 |
| 000005678912 |
| 6789012 |
| ... |
預期的輸出是:
| 代碼 |
|---|
| 000003456789 |
| 000004567891 |
| 000005678912 |
| ... |
uj5u.com熱心網友回復:
您可以使用TRIM()函式和HAVING子句,GROUP BY例如
SELECT CONCAT('00000',TRIM(LEADING '0' FROM code))
FROM t
GROUP BY CONCAT('00000',TRIM(LEADING '0' FROM code))
HAVING COUNT(TRIM(LEADING '0' FROM code))=1
Demo
uj5u.com熱心網友回復:
有幾種方法可以做到這一點。您可以使用 Trim 等功能洗掉前導 0,或使用 RIGHT 獲取最后 7 位數字并進行比較。作為一個例子,你可以做
SELECT CODE
FROM TABLE
WHERE LENGTH(CODE) = 12
AND TRIM(LEADING '0' FROM CODE) NOT IN
(SELECT CODE
FROM TABLE
WHERE LENGTH(CODE) = 7
)
uj5u.com熱心網友回復:
你可以試試這個假設較長的字串有12個字符,開頭是'00000'
select ID from TABLE t1
where
select count (*) from TABLE t2 where substring(t1.ID, 6, 12) <> t2.ID) = 0
uj5u.com熱心網友回復:
嘗試固定長度并將其分組并過濾計數(不是必須固定長度,因為整數 01=1 所以
SELECT
REPLICATE('0',12-LEN(RTRIM(code))) RTRIM(code),COUNT(*)
from TableName
GROUP BY REPLICATE('0',12-LEN(RTRIM(code))) RTRIM(code)
HAVING COUNT(*) <2
uj5u.com熱心網友回復:
您將需要一個 SELF JOIN 并對連接進行一些字串操作,然后只需過濾為其等效代碼產生 NULL 的代碼。
WITH codes AS
(
SELECT '000001234567' AS code UNION ALL
SELECT '1234567' AS code UNION ALL
SELECT '000002345678' AS code UNION ALL
SELECT '2345678' AS code UNION ALL
SELECT '000003456789' AS code UNION ALL
SELECT '000004567891' AS code UNION ALL
SELECT '000005678912' AS code
)
SELECT
c.code,
cc.code AS equivalent_code
FROM
codes c
LEFT JOIN codes cc ON RIGHT(c.code, 7) = cc.code
WHERE CHAR_LENGTH(c.code) > 7
AND cc.code IS NULL
uj5u.com熱心網友回復:
SELECT
CONVERT(code , UNSIGNED) as c,
COUNT(*)
FROM table1
GROUP BY CONVERT(code , UNSIGNED)
HAVING COUNT(*)<>2
;
見:DBFIDDLE
無符號數字的最大值是4294967295,因此轉換為 UNSIGNED 足以容納您的數字,因為它們最多有 7 位數字。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467560.html
