所以我正在嘗試做這個,
"寫一個查詢,獲取名字長度大于等于8的員工的詳細資訊"
預期的結果是這樣的

所以我所做的是
SELECT * FROM employees WHERE LENGTH(fname) >= 8;
但是,每當我嘗試執行代碼時,回傳的行都不是長度大于或等于 8 的名字

編輯:附加圖片

編輯 2:似乎從我匯入的檔案中,名字的列有空格
uj5u.com熱心網友回復:
看起來您的值包含前導或尾隨空格。除了 LENGTH() 之外,還使用 ??TRIM(),例如LENGTH(TRIM(fname)) >= 8。
此外,LENGTH() 函式以位元組為單位測量字串的大小,而您關心的是字串的大小(以字符為單位)。所有這些都意味著根據您的字符集,您將獲得不同的查詢答案。
CREATE TABLE employees(employee_id INT, fname VARCHAR(20)) CHARSET utf8mb4;
INSERT INTO employees VALUES
(100, 'Steven'), (101, 'Neena'), (102, 'Lex'), (103, 'Alexander');
SELECT * FROM employees WHERE LENGTH(TRIM(fname)) >= 8;
-- ------------- -----------
-- | employee_id | fname |
-- ------------- -----------
-- | 103 | Alexander |
-- ------------- -----------
-- 1 row in set (0.00 sec)
ALTER TABLE employees CONVERT TO CHARSET utf16;
SELECT * FROM employees WHERE LENGTH(TRIM(fname)) >= 8;
-- ------------- -----------
-- | employee_id | fname |
-- ------------- -----------
-- | 100 | Steven |
-- | 101 | Neena |
-- | 103 | Alexander |
-- ------------- -----------
-- 3 rows in set (0.00 sec)
ALTER TABLE employees CONVERT TO CHARSET utf32;
SELECT * FROM employees WHERE LENGTH(TRIM(fname)) >= 8;
-- ------------- -----------
-- | employee_id | fname |
-- ------------- -----------
-- | 100 | Steven |
-- | 101 | Neena |
-- | 102 | Lex |
-- | 103 | Alexander |
-- ------------- -----------
-- 4 rows in set (0.00 sec)
替代的 CHAR_LENGTH() 函式以字符為單位測量大小。
SELECT * FROM employees WHERE CHAR_LENGTH(TRIM(fname)) >= 8;
-- ------------- -----------
-- | employee_id | fname |
-- ------------- -----------
-- | 103 | Alexander |
-- ------------- -----------
-- 1 row in set (0.00 sec)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/366224.html
標籤:mysql
上一篇:一個月的每日用戶留存率mySQL
