SQL 类似于 Grep 功能的查询
SQL Query similar to Grep functionality
我有以下 bash 命令:
grep -P 'The Beatles' | wc -l
我需要创建一个模仿相同功能的 SQL 查询。 table 架构如下:
track_id
sales_date
sales_count
title
song_id
release
artist_id
artist_mbid
artist_name
duration
artist_familiarity
artist_hotttnesss
year
示例数据:
TRZZZZZ12903D05E3A,2014-06-19,79,Infra Stellar,SOZPUEF12AF72A9F2A,Archives Vol. 2,ARBG8621187FB54842,4279aba0-1bde-40a9-8fb2-c63d165dc554,Delerium,495.22893,0.69652442519,0.498471038842,2001
我写了下面的代码,但是它无法进行区分大小写的匹配。
SELECT Count(track_id) FROM songs WHERE track_id LIKE '%The Beatles%' OR title LIKE '%The Beatles%' OR song_id LIKE '%The Beatles%' OR release LIKE '%The Beatles%' OR artist_id LIKE '%The Beatles%' OR artist_mbid LIKE '%The Beatles%' OR artist_name LIKE '%The Beatles%' OR duration LIKE '%The Beatles%' OR artist_familiarity LIKE '%The Beatles%' OR artist_hotttnesss LIKE '%The Beatles%' OR year LIKE '%The Beatles%'
我尝试使用 COLLATE Latin1_General_CS_AS
和 COLLATE Latin1_General_BIN
但它给了我以下错误:
ERROR 1273 (HY000) at line 1: Unknown collation: 'Latin1_General_BIN'
我可以进行区分大小写的匹配吗?
谢谢!
在 MySQL 中进行区分大小写比较的一种通常有效的简单方法是使用 binary
:
SELECT Count(track_id)
FROM songs
WHERE track_id LIKE BINARY '%The Beatles%' OR
title LIKE BINARY '%The Beatles%' OR
song_id LIKE BINARY '%The Beatles%' OR
release LIKE BINARY '%The Beatles%' OR
artist_id LIKE BINARY '%The Beatles%' OR
artist_mbid LIKE BINARY '%The Beatles%' OR
artist_name LIKE BINARY '%The Beatles%' OR
duration LIKE BINARY '%The Beatles%' OR
artist_familiarity LIKE BINARY '%The Beatles%' OR
artist_hotttnesss LIKE BINARY '%The Beatles%' OR
year LIKE BINARY '%The Beatles%';
对了,这类题就是说"use a full text index, use a full text index"。你可以阅读 here.
我有以下 bash 命令:
grep -P 'The Beatles' | wc -l
我需要创建一个模仿相同功能的 SQL 查询。 table 架构如下:
track_id
sales_date
sales_count
title
song_id
release
artist_id
artist_mbid
artist_name
duration
artist_familiarity
artist_hotttnesss
year
示例数据:
TRZZZZZ12903D05E3A,2014-06-19,79,Infra Stellar,SOZPUEF12AF72A9F2A,Archives Vol. 2,ARBG8621187FB54842,4279aba0-1bde-40a9-8fb2-c63d165dc554,Delerium,495.22893,0.69652442519,0.498471038842,2001
我写了下面的代码,但是它无法进行区分大小写的匹配。
SELECT Count(track_id) FROM songs WHERE track_id LIKE '%The Beatles%' OR title LIKE '%The Beatles%' OR song_id LIKE '%The Beatles%' OR release LIKE '%The Beatles%' OR artist_id LIKE '%The Beatles%' OR artist_mbid LIKE '%The Beatles%' OR artist_name LIKE '%The Beatles%' OR duration LIKE '%The Beatles%' OR artist_familiarity LIKE '%The Beatles%' OR artist_hotttnesss LIKE '%The Beatles%' OR year LIKE '%The Beatles%'
我尝试使用 COLLATE Latin1_General_CS_AS
和 COLLATE Latin1_General_BIN
但它给了我以下错误:
ERROR 1273 (HY000) at line 1: Unknown collation: 'Latin1_General_BIN'
我可以进行区分大小写的匹配吗? 谢谢!
在 MySQL 中进行区分大小写比较的一种通常有效的简单方法是使用 binary
:
SELECT Count(track_id)
FROM songs
WHERE track_id LIKE BINARY '%The Beatles%' OR
title LIKE BINARY '%The Beatles%' OR
song_id LIKE BINARY '%The Beatles%' OR
release LIKE BINARY '%The Beatles%' OR
artist_id LIKE BINARY '%The Beatles%' OR
artist_mbid LIKE BINARY '%The Beatles%' OR
artist_name LIKE BINARY '%The Beatles%' OR
duration LIKE BINARY '%The Beatles%' OR
artist_familiarity LIKE BINARY '%The Beatles%' OR
artist_hotttnesss LIKE BINARY '%The Beatles%' OR
year LIKE BINARY '%The Beatles%';
对了,这类题就是说"use a full text index, use a full text index"。你可以阅读 here.