プロが教えるわが家の防犯対策術!

下記のようなDBがあったときに、下図のように変換したクエリを書くことってできますか

下記の例のように、ID2 は From > To の関係があります。
そのときに、 Fromを前日に変更 かつ 23:59:59 に、Toを 00:00:00 ~ 指定日までに変更したいのですがクエリ上で変換はできますか

変換前
ID  From        To
1  2022/7/12 12:00 2022/7/12 13:00
2  2022/7/12 15:00 2022/7/12 14:00 ← From > Toの関係
3  2022/7/13 12:00 2022/7/12 16:00

変換後
ID  From        To
1  2022/7/12 12:00 2022/7/12 13:00
2  2022/7/11 15:00 2022/7/11 23:59:59 ←2列になる
3  2022/7/12 00:00 2022/7/12 14:00:00   ←2列になる
4  2022/7/13 12:00 2022/7/12 16:00

A 回答 (4件)

ID=3もFrom>Toの関係ですが、どう扱うのですか?

    • good
    • 0

下記のクエリをそれぞれ入れて動かせば出来ると思います


頑張った。バタッ

【Q_1】クエリ
SELECT TBL_SUM.ID
, IIf([From]>[to],Format(DateAdd("d",-1,[from]),"yyyy/mm/dd hh:nn:ss"),Format([from],"yyyy/mm/dd hh:nn:ss")) AS FromDate
, IIf([From]>[to],Format(DateAdd("d",-1,[to]),'yyyy/mm/dd" 23:59:59"'),[to]) AS ToDate
FROM TBL_SUM;

【Q_2】クエリ
SELECT TBL_SUM.ID, Format([From],"yyyy/mm/dd"" 00"":""00"":""00""") AS fromdate, TBL_SUM.To
FROM TBL_SUM
WHERE (((TBL_SUM.[from])>[To]));

【U_1】クエリ
select * from Q_1
UNION ALL select * from Q_2
ORDER BY 1, 2;
    • good
    • 0

>上記①②③をUNION ALLして返すとか。


あ、列IDの値が重複するので、そちらについては除外してリナンバーする必要があります。
    • good
    • 1

①From<=Toなレコードのみを選択したクエリ


②From>Toのとき、Toをその日の23:59:59にしたレコードを返すクエリ
③From>Toのとき、Fromをその次の日の0:00:00に、Toに+1日したレコードを返すクエリ
上記①②③をUNION ALLして返すとか。

今時のSQLServerならもっと良い方法があるかもしれない。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!