将字符串字段转换为Azure表存储中的datetime字段

时间:2011-01-08 15:29:48

标签: azure azure-table-storage

我在Azure表中有一个字段,它以字符串格式保存日期时间。我想用DateTime字段替换它并转换字符串列中的值。什么是解决这个问题的最佳方法?

在SQL中,我通过创建新列并运行更新语句来实现这一点......

3 个答案:

答案 0 :(得分:1)

我自己没试过,但这里是/应该/工作的步骤。这需要是一个C#/ VB / etc脚本。

  1. 更改类的定义以包含datetime类型的/ new /成员。
  2. 运行linq查询以从表中加载所有行,并运行for循环,该循环将基于旧字符串变量填充新的datetime变量。
  3. 将对象保存到表中。 //现在您的表存储包含具有该变量的新旧定义的对象
  4. 从类定义中删除旧字段
  5. 再次从表中加载对象并保存它们,但不做任何操作,只是将它们标记为脏。这/应该/从表中的序列化结构中删除旧成员。 现在,如果您希望新的datetime字段采用原始字符串变量的名称,请再次执行步骤1到5,这次将数据从一个字段移动到另一个字段。唯一的区别是你不必再做转换。
  6. 一般来说,这是一个完整的PITA,也是对象数据库和存储服务的祸根之一。

答案 1 :(得分:0)

Azure表存储客户端本身理解DateTime(但不是DateTimeOffset),因此您可能需要考虑让SDK为您处理此事。

否则,将DateTimes表示为字符串的最佳方法是将它们显式存储和检索为使用“u”格式编写和解析的UTC值,例如

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

答案 2 :(得分:0)

我不知道它是否会奏效,但你可以尝试“幸福的无知”:

Real Table商店实际上并不关心实体的形状(Dev fabric可能不同)。将您的实体属性更改为DateTime,但在Setter测试中,该值是Datetime,如果不将该值解析为DT。像

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

}

希望随着时间的推移,或明确地批量生成,如果只是加载实体并再次保存它们,它们将把它们全部设置为DateTime。