mysql格式化日期

时间:2009-02-03 13:30:41

标签: sql mysql

我正在尝试此查询:

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开头

3 个答案:

答案 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来实现结果。