我正在尝试此查询:
SELECT ARTICLE_NO,
USERNAME,
ACCESSSTARTS,
ARTICLE_NAME,
date_format( ACCESSSTARTS, '%d %m %Y' ) AS shortDate
FROM AUCTIONS
WHERE upper( ARTICLE_NAME ) LIKE '%hardy%'
LIMIT 0 , 10;
哪种方法正常,但shortDate为空,我不确定原因。
数据库的内容如下:
ARTICLE_NO USERNAME ACCESSSTARTS ARTICLE_NAME shortDate
110313660559 banger-wear 17.11.2008 13:24:56 acolshirt NULL
编辑:accessstarts字段不是日期时间字段,而是varchar。我不确定该怎么做。我应该简单地在ACCESSSTARTS中的第一个空格之后去除所有内容以仅显示日期吗?
或者将列转换为日期时间字段会更好吗?如果是这样,我将如何指定它应该是%D.%M.%Y格式而不是默认值,它默认以%Y开头
答案 0 :(得分:1)
ACCESSSTARTS的格式看起来就像你有一个varchar的日期,但DATE_FORMAT需要一个DATE或DATETIME值。
你可以尝试使用STR_TO_DATE将该字符串首先转换为日期值,例如
SELECT
ACCESSSTARTS,
date_format(str_to_date(ACCESSSTARTS, '%d.%m.%Y %k:%i:%s'), '%d %m %Y' ) AS shortDate
FROM AUCTIONS
WHERE upper( ARTICLE_NAME ) LIKE '%hardy%'
LIMIT 0 , 10;
答案 1 :(得分:1)
ACCESSSTARTS看起来像一个字符串类型的列而不是日期时间。尝试更换
date_format( ACCESSSTARTS, '%d %m %Y' )
由此:
date_format(str_to_date(ACCESSSTARTS, '%d.%m.%Y %H:%i:%S'), '%d %m %Y');
答案 2 :(得分:0)
17.11.2008 13:24:56似乎不是一个有效的mysql日期。您是否将该列存储为日期,如果存在,是否有任何格式应用于该日期。 您可以使用STR_TO_DATE的组合将字符串格式转换为日期,然后在日期上使用DATE_FORMAT来实现结果。