【问题标题】:How to use to_char function functionality in MySQL如何在 MySQL 中使用 to_char 函数功能
【发布时间】:2014-10-04 04:20:35
【问题描述】:

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

MySQL 中是否有对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

【问题讨论】:

  • 用 SQL 编写查询 ?对不起,我不明白!
  • 我在 oracle 中使用相同的查询,to_char 函数工作正常,或者我得到正确的输出但如果我使用 sql,那么我得到错误,因为 sql 不支持 to_char 函数..所以我看起来一样sql 的一种函数 ..
  • 我编辑了您的问题,请适当地标记问题。因为答案取决于它。
  • 非常感谢 Maheswaran...:)

标签: mysql sql oracle mysql-workbench sqlyog


【解决方案1】:

在 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;

【讨论】:

  • 确实如此。唯一始终有效的格式没有连字符,但我坚持使用带连字符的格式。除了我是一个人(并且发现它更具可读性)之外,这种形式在数据库中被广泛接受,甚至在使用 date 关键字的 Oracle 中也是如此。
  • 明白了,戈登!你的更新让我和 cmets 变得更好了!
  • 感谢您对我仅使用 mysql 的适当响应
【解决方案2】:

基于 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 设置的影响。

【讨论】:

  • 感谢您的适当回复,但我没有使用 sql server .i 我只使用 mysql
  • @sam140 仍然......只有 sql 是什么意思? sql 是 DBMS 的名称吗?
【解决方案3】:

建议你这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多