我有一个数据库表 mytable ,其中包含Varchar格式的列 name ,以及带有Datetime值的列 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,尽管应该计算包含至少一个字母的所有字段。
答案 0 :(得分:4)
你写道:
这里的范围语法似乎有问题
确实如此。 MySQL的LIKE运算符(通常是SQL)does not support range notation,只是简单的通配符。
尝试MySQL的非标准RLIKE(a.k.a. REGEXP),以获得更全面的模式匹配。
答案 1 :(得分:4)
我相信LIKE只是用于搜索字符串的一部分,但听起来你想要实现一个正则表达式来搜索一个范围。
在这种情况下,请改用REGEXP。例如(简化):
SELECT * FROM mytable WHERE name REGEXP "[a-z]"
您当前的查询正在查找字符串“[a-z]”。
更新:
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)
答案 2 :(得分:2)
我相信你想使用WHERE REGEXP'^ [a-z] $'而不是LIKE。
答案 3 :(得分:2)