Выбор строкового значения и преобразование / приведение к дате - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь объединить две таблицы из MariaDB и преобразовать длинный текст (который, как я предполагаю, совпадает со строкой?) В дату.

Я просмотрел несколько форумов и прочитал некоторые из них.документация MariaDB, но я не опытный программист SQL, поэтому я, вероятно, где-то неправильно понял синтаксис, и был бы признателен за любую помощь, которую вы можете оказать.

Данные в 'members_expiry_date' не являются обязательными- некоторые записи имеют значение ПУСТО (NULL), но там, где есть дата, это длинный текст в следующем формате: 2019/12/31 (ГГГГ / мм / дд)

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 и, хотя я думаю, что он берет 'members_expiry_date' и создает столбец DATE ('Subs_Expire'), яне могу манипулироватьстолбец в плагине wpDataTables как столбец DATE.Я знаю это, потому что я добавил столбец «User_Registered», который содержит данные DATETIME и имеет операторы «больше» и «меньше», доступные в параметрах условного форматирования, а столбец «Subs_Expire» - нет.

У меня естьпопытался использовать CAST () и CONVERT () с различными параметрами DATE / TIME вместо STR_TO_DATE (), но безуспешно.

Я разместил запрос на веб-сайте TMS, кодировщиках wpDataTables, чтобы выяснить,они могут помочь: 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';

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Вам необходимо условие соответствия для ключа в предложении ON и преобразование в SELECT:

SELECT u1.`ID` AS `User ID`,
       u1.`user_login` AS `Website ID`,
       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';

Я считаю плохой практикой иметь псевдонимы столбцов с пробелами.Если необходимо, то используйте разделители (или двойные кавычки) для разделителя.Используйте только одинарные кавычки для строковых значений и значений констант даты.

0 голосов
/ 26 апреля 2019

Ваше последнее предложение может быть таким.

LEFT JOIN icxdx_usermeta м3 ВКЛ (м3. user_id = u1. ID И м3. meta_key = (ВЫБЕРИТЕ CAST (members_expiry_date AS DATE))

Полагаю, это утверждение должно сработать. Но это может создать ошибку для нуля. попробуй.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...