3

我有一张表tine_by_day,我知道如何使用TO_CHARin 函数oracle,但是如果我使用 in ,如何获得相同的输出MySQL

MySQLfor中是否有任何转换功能TO_CHAR()

我已经尝试过date_format了,但to_char我没有得到足够的结果。

SELECT
    to_char(t.the_date,'mm-DD-YYYY') Date,
    SUM(sf7.unit_sales) UnitSales,
    SUM(sf7.store_sales) StoreSales,
    SUM(sf7.store_cost) StoreCost
FROM time_by_day t INNER JOIN sales_fact_1997 sf7 ON t.time_id=sf7.time_id
WHERE
    to_char(t.the_date,'YYYY-MM-DD')>='2012-01-01'
    AND
    to_char(t.the_date,'YYYY-MM-DD')<='2012-01-07'
GROUP BY t.the_date
ORDER BY t.the_date
4

3 回答 3

4

在 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;
于 2014-08-11T11:00:35.277 回答
0

基于 Gordons 方法,但使用 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 设置的影响。

于 2014-08-11T11:02:56.420 回答
0

建议您这样做:

CAST($(STR) AS CHAR(40))
于 2019-12-11T03:52:32.560 回答