0

こんにちは私はSQLサーバーに1つのテーブルを持っており、平日ごとに1ビットを追加しました。日付であるプロパティが1つあり、この日付のdayofWeekに応じて、すべてのテーブルを更新してビットを更新したいと思います。t-sql(datepart)について何か読んだことがありますが、どうすればよいかわかりません。誰かが私を少し助けてくれますか?

これが私のテーブルのスクリーンショットです

http://i.imgbox.com/adpsLL0D.jpg

たとえば、最初の3つのレコード(2012-11-04、先月、日曜日)で、「prt_Dom」の更新を1に更新したいと思います。

ありがとう。

4

2 に答える 2

2
SET DATEFIRST 1
UPDATE [tableName] SET [prt_Mar] = 1 WHERE DATEPART(dw, [prt_fecha]) = 2

水曜日の場合は、

UPDATE [tableName] SET [column] = 1 WHERE DATEPART(dw, [prt_fecha]) = 3

SET DATEFIRST文化が異なれば「週の最初の日」の数も異なるため、これは比較的重要です。平日を定期的に行う必要がある場合は、それを抽出するための完全に決定論的な方法があります。

于 2012-12-11T16:16:14.680 に答える
1

あなたが何をしようとしているのか完全にはわかりませんが、おそらくこのようなものですか?

set language spanish
go

update dbo.MyTable
set
    prt_Lun = case when datename(dw, prt_fecha) = 'Lunes' then 0x1 else 0x0 end,
    prt_Mar = case when datename(dw, prt_fecha) = 'Martes' then 0x1 else 0x0 end,
    prt_Mie = case when datename(dw, prt_fecha) = 'Miércoles' then 0x1 else 0x0 end,
    prt_Jue = case when datename(dw, prt_fecha) = 'Jueves' then 0x1 else 0x0 end,
    prt_Vie = case when datename(dw, prt_fecha) = 'Viernes' then 0x1 else 0x0 end,
    prt_Sab = case when datename(dw, prt_fecha) = 'Sábado' then 0x1 else 0x0 end,
    prt_Dom = case when datename(dw, prt_fecha) = 'Domingo' then 0x1 else 0x0 end
where
    ...

ロジックが本当にこれほど単純な場合は、いつでもオンデマンドprt_%からビット値を導出できるため、列はまったく必要ありません。prt_fechaしかし、ここでデフォルトを設定していると思いますが、後でオーバーライドすることができます。その場合、テーブルは理にかなっています。

SET DATEFIRSTまた、日付を操作するときは、やなどのカルチャ固有の設定に注意してSET LANGUAGEください。

于 2012-12-11T16:20:58.600 に答える