如何在MySQL中使用to_char函数功能

时间:2014-08-11 10:54:50

标签: mysql sql oracle mysql-workbench sqlyog

我有一个表格tine_by_day,我知道如何在TO_CHAR中使用oracle功能,但如果我在MySQL中使用,如何获得相同的输出?

MySQL的{​​{1}}是否有任何转化功能?

我已经尝试TO_CHAR()而不是date_format,但我没有得到足够的结果。

to_char

3 个答案:

答案 0 :(得分:3)

在SQL Server中,您通常会使用convert()函数,这不如to_char()那么方便。对于您的查询,您只需要select子句:

SELECT convert(varchar(10), t.the_date, 110) as Date,
       SUM(sf7.unit_sales) as UnitSales,
       SUM(sf7.store_sales) as StoreSales,
       SUM(sf7.store_cost) as StoreCost
FROM time_by_day t INNER JOIN
     sales_fact_1997 sf7
     ON t.time_id = sf7.time_id
WHERE t.the_date >='2012-01-01' AND
      t.the_date <= '2012-01-07'
GROUP BY t.the_date
ORDER BY t.the_date;

SQL Server 通常将ISO标准YYYY-MM-DD视为日期并自动执行转换。有一个特殊的国际化背景,将其视为YYYY-DD-MM,唉。无论这些设置如何,都应该正确解释以下内容(尽管我会使用上面的表格):

WHERE t.the_date >= cast('20120101' as date) AND
      t.the_date <= cast('20120107' as date)

编辑:

在MySQL中,您只需使用date_format()

SELECT date_format(t.the_date, '%m-%d-%Y') as Date,
       SUM(sf7.unit_sales) as UnitSales,
       SUM(sf7.store_sales) as StoreSales,
       SUM(sf7.store_cost) as StoreCost
FROM time_by_day t INNER JOIN
     sales_fact_1997 sf7
     ON t.time_id = sf7.time_id
WHERE t.the_date >= date('2012-01-01') AND
      t.the_date <= date('2012-01-07')
GROUP BY t.the_date
ORDER BY t.the_date;

答案 1 :(得分:0)

基于戈登的方法,但是使用CHAR(10)而不是VARCHAR(10),因为几乎没有一个日期没有以10的长度返回......

SELECT convert(char(10), t.the_date, 110) as [Date],
   SUM(sf7.unit_sales) as UnitSales,
   SUM(sf7.store_sales) as StoreSales,
   SUM(sf7.store_cost) as StoreCost
FROM time_by_day t INNER JOIN
 sales_fact_1997 sf7
 ON t.time_id = sf7.time_id
WHERE t. the_date >='20120101' AND
  t.the_date <= '20120107'
GROUP BY t.the_date
ORDER BY t.the_date;

编辑:还将WHERE子句中的日期格式更改为符合ISO标准,并且不受DATEFORMAT设置的影响。

答案 2 :(得分:0)

建议您这样做:

CAST($(STR) AS CHAR(40))