1

私のSQL Server データベースでは、日付が次の形式でchar(12)として保存されています。

yyyymmddhhmm

定義を作成していないため、変更できません。私は常に C# を使用して、この文字列をアプリケーション レベルで処理していました。

ここで、 TSQLでタスクを実行する必要があり、月ごとにグループ化する必要があります。したがって、月を抽出する必要があります。このタスクに使用できる TSQL 関数はありますか?

ない場合は、ストアド プロシージャを作成してgetMonth(stringDate)、文字列を取得し、そこから 4 番目と 5 番目の文字を抽出することは良い解決策ですか? 次の句を使用できますか。

group by getMonth(stringDate)

私のクエリで?ありがとう

4

4 に答える 4

3

あなたはできる;

SUBSTRING(fld, 5, 2)

個人的には、その文字列DATETIME

于 2012-03-22T16:10:18.780 に答える
1

月は常に 4 文字の年の後の 2 文字であるため、以下を使用して月を取得できます。

declare @date char(12)
set @date = '201203220906'
select substring(@date, 5, 2)

結果:03

またはそれを取得する別の方法は、次group byのいずれかのクエリで結果を取得できます。

declare @date char(12)
set @date = '201203220906'
select Month(cast(left(@date, 8) as datetime))
于 2012-03-22T16:10:19.430 に答える
1

仮定

CREATE TABLE #Table(
    DateValue char(12),
    Value int)

INSERT INTO #Table VALUES ('20120110833', 1)
INSERT INTO #Table VALUES ('20120110833', 2)
INSERT INTO #Table VALUES ('20120110833', 3)
INSERT INTO #Table VALUES ('20120210833', 4)
INSERT INTO #Table VALUES ('20120210833', 5)

これを簡単に行うことができます:

select 
    MONTH(CAST(LEFT(DateValue, 8) as datetime)) Month, 
    SUM(value)
FROM
    #Table
GROUP BY
    MONTH(CAST(LEFT(DateValue, 8) as datetime))

時間/分の部分をトリムし、datetime としてキャストし、MONTH 関数を適用します

于 2012-03-22T16:25:14.743 に答える
0

この特定のケース (yyyymmddhhmm 形式の char 型の日付) では、クエリで次の関数を使用できます。

substring (yyyymmdd を抽出するため)、convert (datetime 値を取得するため)、datepart (月のコンポーネントを取得するため)

...次に、月 (または任意の日付コンポーネント) でグループ化し、適切な値で datecolumnname と tablename を変更できます

select datepart(month,convert(datetime,substring(datecolumnname,1,8),112)), 
   count(datepart(month,convert(datetime,substring(datecolumnname,1,8),112))) 
from tablename 
   group by datepart(month,convert(datetime,substring(datecolumnname,1,8),112))
于 2012-03-22T16:27:02.400 に答える