选择字符串值并将其转换/转换为日期

时间:2019-04-26 08:06:25

标签: sql wordpress date mariasql

我试图从MariaDB连接两个表,并将longtext(我认为与字符串相同?)转换为日期。

我已经搜索了一些论坛并阅读了一些MariaDB文档,但是我不是熟练的SQL编码器,因此我可能在某些地方弄错了语法,希望您能提供任何帮助。 / p>

'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'),但我无法像DATE列那样操作wpDataTables插件中的列。 我知道这一点是因为我添加了“ 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 :(得分:0)

您的最后一句话可能是这样。

  

左联接icxdx_usermeta m3 ON(m3。user_id = u1。ID并且   m3。meta_key =(选择投放(会员资格到期日期为DATE))

我想这句话必须奏效。但是它可能会为null创建错误。试试看。

答案 1 :(得分:0)

您需要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';

我认为将列别名包含空格是不好的做法。如果必须,请使用反引号(或双引号)作为分隔符。仅对字符串和日期常量值使用单引号。