我想从以下查询中获取月份名称:
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)
值。
答案 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