我有一個名爲Days
的列表。 Days
列存儲代表星期幾的以逗號分隔的字符串。例如,值1,2
將代表Sunday, Monday
。我不想將此信息存儲爲以逗號分隔的字符串,而是將其轉換爲JSON,並將其存儲在同一個表中名爲Frequency
的列中。例如,與1,2
的Days
值的記錄應更新存儲以下在它的Frequency
柱:更新數據庫列,並根據另一列的值構建字符串
'{"weekly":"interval":1,"Sunday":true,"Monday":true,"Tuesday":false,"Wednesday":false,"Thursday":false,"Friday":false,"Saturday":false}}'
我發現了一個辦法做到這一點使用CASE語句,若假設不存在的唯一一個數字Days
柱像這樣:
UPDATE SCH_ITM
SET
FREQUENCY =
CASE
WHEN SCH_ITM.DAYS = 1 THEN '{"weekly":{"interval":1,"Sunday":true,"Monday":false,"Tuesday":false,"Wednesday":false,"Thursday":false,"Friday":false,"Saturday":false}}'
WHEN SCH_ITM.DAYS = 2 THEN '{"weekly":{"interval":1,"Sunday":false,"Monday":true,"Tuesday":false,"Wednesday":false,"Thursday":false,"Friday":false,"Saturday":false}}'
WHEN SCH_ITM.DAYS = 3 THEN '{"weekly":{"interval":1,"Sunday":false,"Monday":false,"Tuesday":true,"Wednesday":false,"Thursday":false,"Friday":false,"Saturday":false}}'
WHEN SCH_ITM.DAYS = 4 THEN '{"weekly":{"interval":1,"Sunday":false,"Monday":false,"Tuesday":false,"Wednesday":true,"Thursday":false,"Friday":false,"Saturday":false}}'
WHEN SCH_ITM.DAYS = 5 THEN '{"weekly":{"interval":1,"Sunday":false,"Monday":false,"Tuesday":false,"Wednesday":false,"Thursday":true,"Friday":false,"Saturday":false}}'
WHEN SCH_ITM.DAYS = 6 THEN '{"weekly":{"interval":1,"Sunday":false,"Monday":false,"Tuesday":false,"Wednesday":false,"Thursday":false,"Friday":true,"Saturday":false}}'
WHEN SCH_ITM.DAYS = 7 THEN '{"weekly":{"interval":1,"Sunday":false,"Monday":false,"Tuesday":false,"Wednesday":false,"Thursday":false,"Friday":false,"Saturday":true}}'
END
WHERE SCH_TYPE = 'W';
但是我似乎無法找出一個effecient的方式來處理諸如1,5
一個值轉換成正確的JSON表示。顯然我可以寫出所有可能的排列方式,但肯定是更好的方法?
我沒有答案給你,但我想知道爲什麼你不使用DATEPART()並避免列在一起。也許你沒有日期欄,但我只是想知道。 – scsimon