MySQL LIKE 带范围不起作用

标签 mysql sql-like

我有一个数据库表 mytable,其中包含 Varchar 格式的 name 列和包含日期时间值的 date 列。我想计算具有按日期分组的某些参数的名称。这是我所做的:

SELECT
    CAST(t.date AS DATE) AS 'date',
    COUNT(*) AS total,
    SUM(LENGTH(LTRIM(RTRIM(t.name))) > 4 
        AND (LOWER(t.name) LIKE '%[a-z]%')) AS 'n'
FROM
    mytable t
GROUP BY 
    CAST(t.date AS DATE)

这里的范围语法似乎有问题,如果我只是这样做 LIKE 'a%' 它确实会正确计算所有以 'a' 开头的字段。然而,上面的查询对 n 返回 0,尽管应该计算包含至少一个字母的所有字段。

最佳答案

你写:

It seems that there's something wrong with range syntax here

确实如此。 MySQL 的 LIKE 运算符(以及一般的 SQL)does not support range notation ,只是简单的通配符。

尝试MySQL的非标准RLIKE (又名 REGEXP),用于功能更齐全的模式匹配。

关于MySQL LIKE 带范围不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54693109/

相关文章:

mySQL:如何编写满足两个或多个条件的查询

php - MySQL,无效的日期时间格式 : 1366 Incorrect integer value: '' for column `iRecipes` .`searches` .`id` (php)

php - 如何检查mysql更新查询是否成功?

sql - 什么是全文搜索与 LIKE

本例中MySql单列索引或多列索引

sql - 是否存在不安全的 LIKE 模式之类的东西?

javascript - Node 使用 ObjectionJS 和 Knex,一对多,从多表中返回第一个相关行

mysql - 通过 powershell 安装 Mysql.msi 时出现以下错误

sql - 在sql准备语句中使用LIKE子句,spring,SimpleJDBCTemplate

sql - 在索引编号列上使用 'like'的Oracle查询,性能较差