• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:sql2005 UPDATEの質問なのですが、先日jamshid6さん)

sql2005 UPDATEの質問:顧客マスタへの累計金額の更新方法と年齢の更新可否について

このQ&Aのポイント
  • sql2005 UPDATEの質問:顧客マスタへの累計金額の更新方法について解説します。
  • sql2005 UPDATEの質問:顧客マスタの生年月日から年齢を求めて更新する方法について解説します。
  • sql2005 UPDATEの質問:顧客マスタの生年月日がnullの場合に年齢を0にする方法について解説します。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

(1) 期間の日付って「売上日付」ですか? これがNULLになるのは構造上変じゃないかと思いつつ、「売上日付がNULLなら期間指定が何であれ常に集計対象にしてよい」ということでいいですか? それでいいなら、 WHERE 売上日付 between '2010/03/01' and '2010/06/30' OR 売上日付 IS NULL にしてみてください。 (2) 通常生年月日に時刻までは記録されないので、シンプルに以下の通りでいいでしょう。 UPDATE 顧客マスタ SET 年齢=ISNULL(DATEDIFF(yy,生年月日,GETDATE())+ CASE WHEN DATEADD(yy,DATEDIFF(yy,生年月日,GETDATE()),生年月日)>GETDATE() THEN -1 ELSE 0 END,0)

kirin4247
質問者

補足

sql2005 UPDATE jamshid6さん (1) 期間の日付って「売上日付」ですか? これがNULLになるのは構造上変じゃないかと思いつつ、「売上日付がNULLなら期間指定が何であれ常に集計対象にしてよい」ということでいいですか? それでいいなら、 WHERE 売上日付 between '2010/03/01' and '2010/06/30' OR 売上日付 IS NULL にしてみてください。 説明がわるくてすみません。データの売上日付にNULLが入る事はないのですが、 売上日付の抽出範囲を指定する時(3/1~6/30とか)と、範囲を指定せずに売上データ 全件と言う意味です。 売上日付の期間は、@開始日付 datetime,@終了日付 datetimeでストアドへ引数で渡して いるのでが、UPDATEの前でIFで判断するのか?出来れば、UPDATE分の中に記述出来 ないものかと思います。 宜しくお願いします。

その他の回答 (1)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

#1です。 条件内で記述したいなら、 WHERE 売上日付 BETWEEN ISNULL(@開始日付,'1900/01/01') AND ISNULL(@終了日付,'2099/12/31') でどうですか

kirin4247
質問者

お礼

何度もすみません。 有難うございます。

関連するQ&A