查询字符长度的条件?

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)

如果您正在处理多字节字符,请小心.

  • MySQL 语法与 SQLite 语法相同。对我来说效果很好。 (3认同)
  • 在postgres中你可以像mysql一样使用"length"函数 (3认同)
  • 谨防!在多字节字符集中,它可能不同.见[this](http://stackoverflow.com/questions/1870937/mysql-how-to-select-data-by-string-length) (2认同)

小智 5

我想你想要这个:

select *
from dbo.table
where DATALENGTH(column_name) = 3
Run Code Online (Sandbox Code Playgroud)