とある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("文字列処理による日付のフォーマット統一が完了しました。")