0

MariaDB から 2 つのテーブルを結合し、長いテキスト (文字列と同じだと思いますか?) を日付に変換しようとしています。

いくつかのフォーラムを検索し、MariaDB のドキュメントをいくつか読みましたが、私は SQL コーダーに精通していないため、おそらくどこかで構文が間違っている可能性があります。

「membership_expiry_date」のデータは必須ではありません - 一部のエントリは NULL ですが、日付がある場合は次の形式の長いテキストです: 2019/12/31 (YYYY/mm/dd)

SELECT u1.`ID` AS 'User ID',
       u1.`user_login` AS 'Website ID',
       m1.meta_value AS 'Last Name',
       m2.meta_value AS 'First Name',
       m3.meta_value AS 'Subs Expire',

FROM dbName_users u1
       LEFT JOIN dbName_usermeta m1 ON (m1.`user_id` = u1.`ID` AND m1.`meta_key` = 'last_name')
       LEFT JOIN dbName_usermeta m2 ON (m2.`user_id` = u1.`ID` AND m2.`meta_key` = 'first_name')
       LEFT JOIN dbName_usermeta m3 ON (m3.`user_id` = u1.`ID` AND m3.`meta_key` = STR_TO_DATE('membership_expiry_date', '%Y/%m/%d'))

基本的に、後で操作できるように日付を日付として取り出す必要がありますが、文字列の場合はできません。

このコード (または他のバリアント) を実行できた場合、これまでの結果は NULL です。

更新 だから、wpDataTable WordPress プラグインで以下のコードを使用しています。「membership_expiry_date」を取得して DATE 列 (「Subs_Expire」) を生成していると思いますが、wpDataTables プラグインの列を DATE 列のように操作することはできません。 . これは、DATETIME データを含む「User_Registered」列を追加し、条件付き書式設定オプションで大なり演算子と小なり演算子を使用できるようにしたためですが、「Subs_Expire」列にはありません。

STR_TO_DATE() の代わりにさまざまな DATE / TIME オプションを指定して CAST() および CONVERT() を使用しようとしましたが、うまくいきませんでした。

wpDataTables のコーダーである TMS Web サイトにクエリを投稿して、役立つかどうかを確認しました: https://tmsplugins.ticksy.com/ticket/1989889/

SELECT u1.`ID` AS `User ID`,
       u1.`user_login` AS `Website_ID`,
       u1.`user_registered` AS `User_Registered`,
       m1.meta_value AS `Last_Name`,
       m2.meta_value AS `First_Name`,
       STR_TO_DATE(m3.meta_value, '%Y/%m/%d') as `Subs_Expire`,

FROM dbName_users u1 LEFT JOIN
     dbName_usermeta m1
     ON m1.`user_id` = u1.`ID` AND
        m1.`meta_key` = 'last_name' LEFT JOIN
     dbName_usermeta m2
     ON m2.`user_id` = u1.`ID` AND
        m2.`meta_key` = 'first_name' LEFT JOIN
     dbName_usermeta m3
     ON m3.`user_id` = u1.`ID` AND
         m3.`meta_key` = 'membership_expiry_date';
4

2 に答える 2