表:私はこのテーブルがどのように見えるかであるSQL Serverの2012年にデータベーステーブルTestingTableを持っている:CASE文で複数のDATEPART関数を使用するには?
column_ts column1 FirstName LastName
2016-09-30 00:04:00.000 5 Martha Stuart
2016-09-30 00:24:00.000 51 Tom Riddle
2016-09-30 00:29:00.000 32 Harry Potter
2016-09-30 00:44:00.000 128 Anderson Smith
2016-09-30 00:48:00.000 23 Lisa Young
2016-09-30 01:04:00.000 88 Mad Max
2016-09-30 01:59:00.000 46 Sam King
DDL:あなたが使用してこの表を作成することができます。
CREATE TABLE TestingTable
(
column_ts datetime,
column1 int,
FirstName varchar(255),
LastName varchar(255)
);
INSERT INTO TestingTable
VALUES ('2016-09-30 00:04:00.000',5,'Martha','Stuart'),
('2016-09-30 00:24:00.000',51,'Tom','Riddle'),
('2016-09-30 00:29:00.000',32,'Harry','Potter'),
('2016-09-30 00:44:00.000',128,'Anderson','Smith'),
('2016-09-30 00:48:00.000',23,'Lisa','Young'),
('2016-09-30 01:04:00.000',88,'Mad','Max'),
('2016-09-30 01:04:00.000',46,'Sam','King');
私はcolumn_tsに26-30または56-00の間の分の値がある場合にのみ、column1を選択するクエリがあります。
select ISNULL(column1,0) from TestingTable
where ((DATEPART(n, column_ts) > 25) AND DATEPART(n, column_ts) <= 30)
OR (((DATEPART(n, column_ts) > 55) AND DATEPART(n, column_ts) <= 59) OR DATEPART(n, column_ts) = 0);
結果は次のようになります。
(No column name)
32
46
私の目標:今、私はサブクエリとして上記のクエリを使用します。 FirstName(一意の値を持つ)が指定されている場合、その名前を持つ行を選択しますが、column_tsには26-30または56-00の間の分の値がある場合のみcolumn1の値を選択します。そうでない場合は、column1をゼロとして選択します。
私が試したこと:私はCASEを使用する必要があると思いますが、CASEでは括弧を使用できない/使用しないでください。私はそれのために構文エラーを取得しますが、何かを試してみました:
select column_ts, column1 =
CASE column_ts
WHEN (((DATEPART(n, column_ts) > 25) AND DATEPART(n, column_ts) <= 30)
OR (((DATEPART(n, column_ts) > 55) AND DATEPART(n, column_ts) <= 59) OR DATEPART(n, column_ts) = 0)) THEN column_ts
ELSE 0
END, FirstName, LastName
from TestingTable
where FirstName = 'Tom';
エラー:クエリ上記は、構文エラーを与える:
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near '>'.
Msg 102, Level 15, State 1, Line 4
Incorrect syntax near 'DATEPART'.
達成するために、私は上記のクエリを修正するか、別のクエリを書くことができますどのように私を提案してください。私の目標。
'case'の後に' colum_ts'を削除します。 'when'が' datetime'を返すので 'else'部分を' datetime'として 'cast'します。 –