2016-06-22 3 views
0

ステートメント: 20-12-201631-12-2016の間の乗り換えは1日遅れています。このためにSQLクエリを書くにはどうしたらいいですか?SQLは2つの値の間のすべての日付に1日追加します

私は現在持っている:

UPDATE Rides 
SET (SELECT * FROM Rides WHERE Date BETWEEN '20-12-2016' AND '31-12-2016') = [SOMETHING] 
+1

? (SQL Server?MySQL?Oracle?その他) – Siyual

+0

mysqlの場合は、日付が間違っていて動作しません。 "date math"は、 'yyyy-mm-dd'でフォーマットされた日付でのみ動作します。クエリに値を代入することはできません。クエリからのみ値を抽出します。 –

+0

oracleを使用しています。申し訳ありませんが、 –

答えて

3

これは、Oracleで動作します。それは予約済みで名前フィールド/列に悪い習慣があるため

UPDATE rides 
    SET date_field = date_field + 1 
    WHERE date_field BETWEEN '2016-12-20' AND '2016-12-31'; 

私はdate_fieldとして更新するためのフィールドを参照してください。キーワード。

+0

@ EvilTeach多分、私はちょうどキーワードであるフィールドを更新することはできませんでした - 非常に悪い練習。 – Grayson

+0

@ EvilTeachコメントを追加しました。いいですよ。 – Grayson

+1

以前に行った人から悪いテーブル/カラム名を継承することがあります。それはあなたが対処しなければならないものです。大文字と小文字の混在を許可するために、列名の前後に二重引用符を付けることができます。それはキーワードがキーワードのようには見えないので、クエリが少しきれいに見えるかもしれません。 – EvilTeach

2

あなたはOracleのために使用することができます以下

Update Rides 
Set  Date = Date + 1 
Where Date Between '2016-12-20' And '2016-12-31' 
使用しているどのようなDBMS
+0

そのトリックはしましたか?ありがとう:) –

+0

日付の値には文字列リテラルを使用しないでください。 Oracleは暗黙的に 'NLS_DATE_FORMAT'をフォーマット・マスクとして' TO_DATE() 'を呼び出します。これが一致しない場合、問合せは失敗します。さらに悪いことに、 'NLS_DATE_FORMAT'はセッションパラメータですので、どのユーザもセッションのために変更することができ、クエリのテキストを変更することなくそのユーザのために中断することができます(他のユーザのために働くことができます) 。 – MT0

関連する問題