我有一个表格tine_by_day
,我知道如何在TO_CHAR
中使用oracle
功能,但如果我在MySQL
中使用,如何获得相同的输出?
MySQL
的{{1}}是否有任何转化功能?
我已经尝试TO_CHAR()
而不是date_format
,但我没有得到足够的结果。
to_char
答案 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))