1

「2013_04」などの「YYYY_m」という形式で EntryDate 列を取得しようとしています。

このコードは失敗しました

DATENAME (YYYY, EntryDate) + '_' + DATEPART (M, EntryDate) 

DATEFORMAT を使用する試みも失敗し、M の後の ',' で構文エラーがあったと述べています。代わりにどのコードが機能しますか?

ありがとうございました。

4

4 に答える 4

1
select DATENAME (YYYY, EntryDate) 
      + '_' 
      + right('0' + convert(varchar(2),datepart (MM, EntryDate)), 2)

が追加を実行するDATEPART()には、 の結果を文字列に変換する必要があります。+

参考までに-将来、「失敗」は何の意味もありません。次回は、受け取った実際のエラーを投稿してください。

于 2015-01-12T19:46:05.663 に答える
1

どうdate_format()ですか?

select date_format(EntryDate, '%&Y_%m')

これがMySQLのやり方です。あなたのコードは、SQL Server でこれを実行しようとしているように見えます。

編集:

以下は SQL Server で機能するはずです。

select DATENAME(year, EntryDate) + '_' + RIGHT('00' + DATEPART(month, EntryDate), 2)

個人的に、私は使用するかもしれませんconvert()

select replace(convert(varchar(7), EntryDate, 121), '-', '_')
于 2015-01-12T19:46:32.970 に答える
0

例えば:

SELECT concat(EXTRACT(YEAR FROM '2015/1/1'), '_', 
         LPAD(extract(month from '2014/1/1'),2,'0')) AS OrderYear

これは

  • 文字列を結合する concat
  • 月が 1 桁の場合、先頭に 0 を配置する lpad
  • そして抽出を使用して、必要な日付の部分を選択します。

作業フィドル http://sqlfiddle.com/#!2/63b24/8

于 2015-01-12T19:45:58.273 に答える