俺のSQL
よく書くけど毎回ググってる気がするMySQLのクエリーメモ
前日から直近30日のデータを抽出
カラムがdatetime(時分秒持ってる)のとき
WHERE
DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY) <= updated_at
AND updated_at < CURRENT_DATE
- CURRENT_DATE は当日のdate(YYYY-MM-DD) を取得する関数
- dateとdatetimeの比較メモ
2021-07-20 23:59:59 < 2021-07-21
2021-07-20 <= 2021-07-20 00:00:00
先月1ヶ月分のデータを抽出
前々月の1日 <= データ < 前月の1日
で取得してあげる
WHERE
updated_at >= DATE_FORMAT(ADDDATE(CURDATE(), INTERVAL -1 MONTH), '%Y-%m-01'))
AND updated_at < DATE_FORMAT(CURDATE(), '%Y-%m-01')
列名に変数を使いたい(列名に現在日を表示したい)
こんなことしたい。
name | 2021-09-13_count |
---|---|
hoge | 1 |
fuga | 100 |
PREPARE構文使わないとできない?もっと簡単にできる方法あれば知りたい。。。
SET @DATE=curdate();
set @query = concat('select 1 as `', @DATE, '_count`;');
prepare stmt from @query;
execute stmt;
重複が多いデータを調べる
SELECT count(*),column_name
FROM table_name
where column_name is not null
GROUP BY column_name
HAVING count(*)>1
ORDER BY count(*) DESC
文字数が長いデータを調べる
SELECT *,CHAR_LENGTH(column_name) as STR_LEN FROM table_name ORDER BY STR_LEN DESC;