faq*_*faq 65 sql where conditional-statements
我有一个包含大量单词的数据库,但我想只选择那些字符长度等于给定数字的记录(在例3中):
$query = ("SELECT * FROM $db WHERE conditions AND length = 3");
Run Code Online (Sandbox Code Playgroud)
但这不起作用...有人能告诉我正确的查询吗?
931*_*.93 111
对不起,我不确定你在谈论哪个SQL平台:
在MySQL中:
$query = ("SELECT * FROM $db WHERE conditions AND LENGTH(col_name) = 3");
Run Code Online (Sandbox Code Playgroud)
在MSSQL中
$query = ("SELECT * FROM $db WHERE conditions AND LEN(col_name) = 3");
Run Code Online (Sandbox Code Playgroud)
LENGTH()(MySQL)或LEN()(MSSQL)函数将返回列中的字符串长度,您可以将其用作WHERE子句中的条件.
编辑
我知道这已经很老了,但我认为我会扩展我的答案,因为正如Paulo Bueno正确指出的那样,你很可能想要字符数而不是字节数.谢谢保罗.
所以,对于MySQL来说,就是这样CHAR_LENGTH().下面的示例着重之间的差LENGTH()的CHAR_LENGTH():
CREATE TABLE words (
word VARCHAR(100)
) ENGINE INNODB DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
INSERT INTO words(word) VALUES('??'), ('happy'), ('hay?r');
SELECT word, LENGTH(word) as num_bytes, CHAR_LENGTH(word) AS num_characters FROM words;
+--------+-----------+----------------+
| word | num_bytes | num_characters |
+--------+-----------+----------------+
| ?? | 6 | 2 |
| happy | 5 | 5 |
| hay?r | 6 | 5 |
+--------+-----------+----------------+
Run Code Online (Sandbox Code Playgroud)
如果您正在处理多字节字符,请小心.
小智 5
我想你想要这个:
select *
from dbo.table
where DATALENGTH(column_name) = 3
Run Code Online (Sandbox Code Playgroud)