6

テーブル内のすべての値の日付を同じに更新したいが、各レコードの時刻を保持したい状況にあります。

So these three dates...
8/28/2012 14:00:00
8/28/2010 12:00:00
8/28/2008 10:00:00

Should be turned into...
8/28/2012 14:00:00
8/28/2012 12:00:00
8/28/2012 10:00:00

UPDATE MySpecialTable
SET DateField = {...?};

編集: 日付に関係なく (つまり、2012 年 8 月 28 日、2012 年 1 月 1 日、2012 年 4 月 1 日など)、時間と一括更新をすべての日/月/年に保持したい特定の値。

4

3 に答える 3

6
DECLARE @Target DATETIME;
SET @Target = '20120828';

-- if the date is supposed to be today rather than hard-coded or parameterized:

-- SET @Target = DATEADD(DAY, DATEDIFF(DAY, '19000101', CURRENT_TIMESTAMP), '19000101');

UPDATE dbo.MySpecialTable
  SET DateField = DATEADD(DAY, DATEDIFF(DAY, DateField, @Target), DateField);

これは、対象の日付が列の値より前または後にある場合に機能します。

また、時間だけを気にする場合は、TIME データ型(SQL 2008+) の使用を検討する必要があります。これにより、実際に更新を実行することなく、クエリ時に任意の日付をデータに簡単に適用できます。

于 2012-08-28T15:18:25.193 に答える
0

これを試してください(同じ日付に更新されます):

DECLARE @myDate DATETIME
SET @myDate = '2012-08-28T00:00:00.000'
UPDATE [MySpecialTable]
   SET [DateField] = DATEADD(Day, 0-DATEDIFF(Day, 0, [DateField]), [DateField]) + @myDate
  • DATEADD(Day, 0-DATEDIFF(Day, 0, [DateField]), [DateField])タイムスタンプを取得し、日付を最小値 (1/1/1900) にします
  • 上記を変数の目的の日付に追加します
于 2012-08-28T15:22:25.113 に答える
0

SQL Server 2008 以降を使用していると仮定した場合の 1 つの方法を次に示します。

update MySpecialTable
    set DateField = cast(CURRENT_TIMESTAMP as date) + (DateField - cast(DateField as date))
于 2012-08-28T15:20:21.873 に答える