3

私はテーブルを持っていて、で関数tine_by_dayを使用する方法を知っていますが、で使用すると同じ出力を得るにはどうすればよいですか?TO_CHARoracleMySQL

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 のアプローチに基づいていますが、10 の長さで返されない日付はほとんどないため、VARCHAR(10) の代わりに CHAR(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 に答える