通过使用mysql连接查询来争取获得月份名称

时间:2014-05-30 04:37:53

标签: php mysql

我想从以下查询中获取月份名称:

SELECT 
   a.`user_name`, 
   MONTH(b.`registered_month`) 
FROM 
  `users` as a, 
  `registered_details` as b 
WHERE 
  a.`user_id`=b.`user_id`

但它会在NULL字段中返回MONTH(b.registered_month)值。

3 个答案:

答案 0 :(得分:2)

month功能仅适用于日期字段。它返回给定日期的数字月份(即2014-01-01的1)。还有一个名为monthname的函数,它为您提供给定日期的月份名称。

关于您的查询的另一个注释。通常,您的联接应使用on而不是加入表的位置。

 `users` as a JOIN 
 `registered_details` as b 
ON 
  a.`user_id`=b.`user_id`

修改 由于registered_month是一个数值(1,2,3等),因此您需要使用case语句

SELECT
  CASE b.registered_month
  WHEN 1 THEN 'January'
  WHEN 2 THEN 'February'
  END CASE as theMonth

答案 1 :(得分:1)

SELECT
   MONTH(DATE_FORMAT(STR_TO_DATE(e.registered_month, '%d/%m/%Y'), '%Y-%m-%d'))

确保STR_TO_DATE中的格式是您在registered_month中的格式

答案 2 :(得分:1)

如果你当前的sql_mode设置允许"零" date,如果b.registered_month返回一个字符串(或可以转换为字符串的整数)作为数字月份的有效值(例如1,2,3,...,12)

您可以使用STR_TO_DATE函数将该值转换为MySQL DATE,然后使用DATE_FORMAT函数从DATE中提取月份名称。< / p>

e.g。

SELECT a.user_name
     , DATE_FORMAT(STR_TO_DATE(b.registered_month,'%m'),'%M') AS registered_month_name
  FROM users a
  JOIN registered_details b 
    ON a.user_id = b.user_id
 ORDER BY a.user_name

如果您的sql_mode不允许零日期,则您需要提供有效的年份和月份。您可以使用CONCAT将日期的有效字符串表示形式串联起来,使用您的月份值,使用(例如)这样的表达式:

CONCAT('2014-',b.registered_month,'-01')

代替b.registered_month(作为上述查询中STR_TO_DATE函数的第一个参数,并对第二个参数进行相应的更改,例如'%Y-%m-%d'

您也可以使用这样的表达式来生成有效的DATE(避免使用STR_TO_DATE函数)

DATE_FORMAT('2014-01-01' + INTERVAL ( b.registered_month - 1) MONTH, '%M') AS rm_name