1

マイクロソフト SQL:

文字列を日付に変換してから集計するデータベース クエリがあります。

WEEK(CAST(myDateField as DATE)) AS dt
...
GROUP BY dt

ただし、このWEEK関数は数値を返します。複数の年がある場合は、YEAR()関数を追加する必要があります。CAST/CONVERTこれを1つの日付フィールドにするより良い方法はありますか? 日付が日付形式で週ごとに集計されていれば問題ありません (さらに望ましいことです):

2010-01-07
2010-01-14
2010-01-21 など

4

2 に答える 2

1

MySQLには関数があります:STR_TO_DATE()

たとえば、次のように日付形式を指定する必要があります。

STR_TO_DATE('2013-05-01','%Y-%m-%d');

MSSQL の場合、日付の正確な形式を形式 ID で定義する必要があります。

SELECT convert(datetime, '10/23/2016', 101) -- mm/dd/yyyy

SELECT convert(datetime, '2016.10.23', 102) -- yyyy.mm.dd

SELECT convert(datetime, '23/10/2016', 103) -- dd/mm/yyyy

SELECT convert(datetime, '23.10.2016', 104) -- dd.mm.yyyy

SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy
于 2013-07-29T22:14:42.493 に答える
1

出力として何が必要かわかりません。毎週の最初の日付を取得しようとしているようです。

データが「密度が高い」(すべての日付にデータがあることを意味する) 場合は、次のことができます。

select min(myDateField) as dt
...
GROUP BY year(myDateField), week(myDateField);

あなたのコードにもかかわらず、cast()「MyDateField」というフィールドは文字列ではなく日付/日時として保存されていると思います。

日付を ISO 標準に変換する場合:

select convert(varchar(10), min(myDateField), 121),  -- puts it in YYYY-MM-DD format (my favorite)

最後に、まったく使いたくないかもしれませんweek()。週の最初の曜日を見つけたいだけかもしれません。これを行うには、日付から曜日を引きます。

select dateadd(dd, datepart(dw, 1 - myDateField), myDateField) as dt
...
GROUP BY dateadd(dd, datepart(dw, 1 - myDateField), myDateField);

この構造では、group byselectは同じ引数を持ちます。

于 2013-07-29T22:36:31.170 に答える