我有一个数据库表mytable,列名采用 Varchar 格式,列日期为 Datetime 值。我想用按日期分组的某些参数来计算名称。这是我所做的:
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)
Run Code Online (Sandbox Code Playgroud)
似乎这里的范围语法有问题,如果我只是这样做,LIKE 'a%'它确实会正确计算所有以“a”开头的字段。但是,上面的查询为 n 返回 0,尽管应该计算包含至少一个字母的所有字段。
我相信 LIKE 只是用于搜索字符串的一部分,但听起来您想实现一个正则表达式来搜索范围。
在这种情况下,请改用 REGEXP。例如(简化):
SELECT * FROM mytable WHERE name REGEXP "[a-z]"
Run Code Online (Sandbox Code Playgroud)
您当前的查询正在寻找字面意思是“[az]”的字符串。
更新:
SELECT
CAST(t.date AS DATE) AS 'date',
COUNT(*) AS total,
SUM(LENGTH(LTRIM(RTRIM(t.name))) > 4
AND (LOWER(t.name) REGEXP '%[a-z]%')) AS 'n'
FROM
mytable t
GROUP BY
CAST(t.date AS DATE)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9562 次 |
| 最近记录: |