もう悩まない!MariaDB 10.1で無効日付をスピーディーに削除するベストプラクティス
MariaDB 10.1 で無効な日付値を削除する方法
STR_TO_DATE()
関数を使用して、文字列を日付形式に変換することができます。この関数でエラーが発生した場合、その値は無効な日付値であると判断できます。
DELETE FROM your_table
WHERE STR_TO_DATE(your_column, '%Y-%m-%d') IS NULL;
このクエリは、your_table
テーブルの your_column
列から、STR_TO_DATE()
関数で変換できない値をすべて削除します。
BETWEEN
句を使用して、値を有効な日付範囲と比較することができます。
DELETE FROM your_table
WHERE your_column BETWEEN '1900-01-01' AND '2100-12-31';
正規表現を使用して、無効な日付形式の値を識別することができます。
DELETE FROM your_table
WHERE your_column NOT REGEXP '^[0-9]{4}-[0-9]{2}-[0-9]{2}$';
UPDATE
句を使用して、無効な日付値を有効な値に置き換えることができます。
UPDATE your_table
SET your_column = NULL
WHERE STR_TO_DATE(your_column, '%Y-%m-%d') IS NULL;
注意事項
- 上記のクエリを実行する前に、必ずバックアップを取ってください。
- 上記のクエリは、あくまでも例です。ご自身の状況に合わせて変更する必要があります。
- 無効な日付値を削除する前に、その値が本当に無効であることを確認してください。
CREATE TABLE your_table (
id INT PRIMARY KEY AUTO_INCREMENT,
your_column DATE
);
INSERT INTO your_table (your_column) VALUES
('2024-06-08'),
('2024-06-09'),
('invalid date'),
('2024-06-10');
DELETE FROM your_table
WHERE STR_TO_DATE(your_column, '%Y-%m-%d') IS NULL;
SELECT * FROM your_table;
このコードは、次の操作を実行します。
your_table
という名前のテーブルを作成します。your_table
テーブルにid
列とyour_column
列を追加します。your_column
列は DATE 型です。your_table
テーブルに 4 つの行を挿入します。STR_TO_DATE()
関数を使用して、your_column
列の値を日付形式に変換します。- 変換できない値をすべて削除します。
- 削除後の
your_table
テーブルの内容を表示します。
出力:
id | your_column
---|------------
1 | 2024-06-08
2 | 2024-06-09
4 | 2024-06-10
BETWEEN 句を使用する
CREATE TABLE your_table (
id INT PRIMARY KEY AUTO_INCREMENT,
your_column DATE
);
INSERT INTO your_table (your_column) VALUES
('2023-12-31'),
('2024-01-01'),
('2024-06-08'),
('2024-12-31'),
('invalid date');
DELETE FROM your_table
WHERE your_column BETWEEN '1900-01-01' AND '2100-12-31';
SELECT * FROM your_table;
BETWEEN
句を使用して、your_column
列の値を有効な日付範囲と比較します。
id | your_column
---|------------
1 | 2023-12-31
2 | 2024-01-01
3 | 2024-06-08
4 | 2024-12-31
正規表現を使用する
CREATE TABLE your_table (
id INT PRIMARY KEY AUTO_INCREMENT,
your_column VARCHAR(255)
);
INSERT INTO your_table (your_column) VALUES
('2024-06-08'),
('2024-06-09'),
('invalid date'),
('2024-06-10'),
('2024-06-11-invalid');
DELETE FROM your_table
WHERE your_column NOT REGEXP '^[0-9]{4}-[0-9]{2}-[0-9]{2}$';
SELECT * FROM your_table;
- 正規表現を使用して、
your_column
列の値を YYYY-MM-DD 形式と比較します。
MariaDB 10.1 で無効な日付値を削除する方法
DELETE FROM your_table
WHERE your_column NOT IN (
SELECT STR_TO_DATE(value, '%Y-%m-%d')
FROM your_table_temp
WHERE value IS NOT NULL
);
CREATE TEMPORARY TABLE your_table_temp (
value VARCHAR(255)
);
INSERT INTO your_table_temp (value)
SELECT your_column
FROM your_table;
your_table_temp
テーブルにyour_table
テーブルのyour_column
列の値をすべて挿入します。your_table
テーブルから、your_table_temp
テーブルに存在しない値をすべて削除します。
CASE 式を使用する
DELETE FROM your_table
WHERE CASE
WHEN STR_TO_DATE(your_column, '%Y-%m-%d') IS NULL THEN TRUE
ELSE FALSE
END;
EXISTS 句を使用する
DELETE FROM your_table
WHERE NOT EXISTS (
SELECT 1
FROM your_table_temp
WHERE your_table_temp.value = your_table.your_column
);
CREATE TEMPORARY TABLE your_table_temp (
value DATE
);
INSERT INTO your_table_temp (value)
SELECT STR_TO_DATE(your_column, '%Y-%m-%d')
FROM your_table
WHERE STR_TO_DATE(your_column, '%Y-%m-%d') IS NOT NULL;
REPLACE() 関数を使用する
UPDATE your_table
SET your_column = REPLACE(your_column, '-', '')
WHERE your_column NOT REGEXP '^[0-9]{4}-[0-9]{2}-[0-9]{2}$';
REPLACE()
関数を使用して、your_column
列の値からハイフンをすべて削除します。- 削除後の値が YYYY-MM-DD 形式ではない値をすべて NULL に置き換えます。
mysql mariadb