簡體   English   中英

將字符串字段轉換為Azure表存儲中的日期時間字段

[英]Convert string field to datetime field in Azure table storage

我在Azure表中有一個字段,該字段以字符串格式保存日期時間。 我想用DateTime字段替換它,並轉換字符串列中的值。 解決此問題的最佳方法是什么?

在SQL中,我可以通過創建一個新列並運行一條更新語句來做到這一點。

我自己還沒有嘗試過,但是這是/應該執行的步驟。 這需要一個C#/ VB / etc腳本。

  1. 更改類的定義以包含類型為datetime的/ new /成員。
  2. 運行linq查詢以加載表中的所有行,並運行for循環,該循環將基於舊的字符串變量填充新的datetime變量。
  3. 將對象保存到表。 //現在表存儲中包含具有該變量的新舊定義的對象
  4. 從類定義中刪除舊字段
  5. 再次從表中加載對象,並保存它們(將它們標記為臟),而不進行任何其他操作。 這/應該/從表內的序列化結構中刪除舊成員。 現在,如果您希望新的datetime字段采用原始字符串變量的名稱,請再次執行步驟1至5,這一次將數據從一個字段移到另一個字段。 唯一的區別是您不必再次進行轉換。

通常,這是一個完整的PITA,也是對象數據庫和存儲服務的基礎之一。

Azure Table Storage Client本機可以理解DateTime(但不能理解DateTimeOffset),因此您可能需要考慮讓SDK自行處理此事。

否則,將DateTimes表示為字符串的最佳方法是顯式存儲和檢索它們作為使用“ u”格式編寫和解析的UTC值。

var dateAsString = myDateTime.ToString("u");

我不知道它是否會起作用,但是您可以嘗試“幸福的無知”:

Real Table商店實際上並不關心實體的形狀(Dev結構可能有所不同)。 將您的實體屬性更改為DateTime,但是在Setter測試中,如果未將值解析為DT,則該值為Datetime。 就像是

private DateTime myDT
public DateTime MyDT
{
    get
    {
        return myDT;
    }
    set
    {
       DateTime = null;
       if(value is DateTime)
       {
           myDT = value;
       }
       else
       {
           myDT = DateTime.Parse(value);
       }
    }

}

希望隨着時間的推移,或者明確地成批處理,如果您只是簡單地加載實體並再次保存它們,則會將它們全部設置為DateTime。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM