とあるSQLiteテーブルの年月日データは、
複数の情報から寄せ集めたり、手打ちしてた関係で、、
2026/05/20
2026/05/20 0:00
2026/5/20
(空欄)
といったぐあいで整っていない。
YYYY/MM/DDの形式に整える、空欄は空欄のまま、に整えるpythonスクリプトを
AIに教えてもらいながら、(そのままでは動かないので修正しながら)作成した。
■スクリプト
import sqlite3
# 1. データベースへの接続
db_path = "/Users/kabayon/Documents/DataBase/●●DB.db"
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
table_name = "'01_メンバー情報'"
# ※「ID」は、お使いのテーブルの主キー(ID列名)に書き換えてください
'''
0 "●●" TEXT,
1 "現役" TEXT,
2 "グループ" TEXT,
3 "役職" TEXT,
4 "期" TEXT,
5 "姓名" TEXT,
6 "姓" TEXT,
7 "名" TEXT,
8 "姓ひらがな" TEXT,
9 "名ひらがな" TEXT,
10 "愛称" TEXT,
11 "メンバーカラー" TEXT,
12 "出身都道府県" TEXT,
13 "出身市" TEXT,
14 "血液型" TEXT,
15 "生年月日" TEXT,
16 "現在年齢" TEXT,
17 "加入日" TEXT,
18 "加入年齢" TEXT,
19 "卒業日" TEXT,
20 "卒業年齢" TEXT,
21 "KIDS" TEXT,
22 "EGG" TEXT,
23 "研修生" TEXT,
24 "オーディション" TEXT,
25 "特技・趣味" TEXT,
26 "座右の銘" TEXT,
27 "Final" TEXT,
28 "備考" TEXT,
29 "在籍日数" TEXT
30 "ID" INTEGER,PKEY
'''
# テーブルの構造情報を取得して列名を特定
cursor.execute(f"PRAGMA table_info({table_name})")
columns_info = cursor.fetchall()
len_columns_info = len(columns_info)
#for column_info in columns_info:
#print(column_info)
#cursor.execute(f"SELECT 'id', '生年月日' FROM '01_メンバー情報'")
cursor.execute("SELECT * FROM '01_メンバー情報'")
rows = cursor.fetchall()
#print(len(rows[0]))
cond_col_idx = 30
cond_col_name = columns_info[cond_col_idx][1]
list_num = [15,17,19]
i_row = 0
for row in rows:
print(i_row)
row_id = row[30]
for i_num in range(0,3):
target_col_idx = list_num[i_num]
# 各要素のインデックス1に列名(name)が格納されています
target_col_name = columns_info[target_col_idx][1]
raw_date = row[list_num[i_num]]
#print(i_num,raw_date)
# 空欄(データがない、あるいは空文字)の場合はスキップ
if raw_date is None or str(raw_date).strip() == "":
continue
# 文字列の前後にある余計な空白を削除
# raw_date = str(raw_date).strip()
# 日付の後ろにスペースと時間( 00:00など)がある場合、スペースで分割して日付のみを取得
date_part = raw_date.split(" ")[0]
# スラッシュ「/」で年、月、日に分解
parts = date_part.split("/")
#print(i_num,date_part,len(parts))
if len(parts) == 3:
year = parts[0]
month = parts[1]
day = parts[2]
# zfillを使って、月と日を2桁にゼロ埋めする(年は4桁)
# 例: "7" -> "07", "5" -> "05" / "2016" -> "2016"
formatted_date = (
f"{year.zfill(4)}/{month.zfill(2)}/{day.zfill(2)}"
)
# 動的にUPDATE文を構築して実行(列名はプレースホルダにできないためf文字列を使用)
# ※列名にスペース等が含まれる場合を考慮し、ダブルクォーテーションで囲んでいます
update_query = (
f'UPDATE {table_name} SET {target_col_name} = ? WHERE {cond_col_name} = ?'
)
print(i_num,update_query,raw_date," to ",formatted_date)
# 値の部分は安全のためプレースホルダ(?)で渡します
cursor.execute(update_query, (formatted_date, row_id))
i_row += 1
# 4. 変更を確定して閉じる
conn.commit()
conn.close()
print("文字列処理による日付のフォーマット統一が完了しました。")