将字符串字段转换为Azure表存储中的DateTime字段
-
08-10-2019 - |
题
我在Azure表中有一个字段,该字段以字符串格式保存日期时间。我想用DateTime字段替换它,然后在字符串列中转换值。最好的方法是什么?
在SQL中,我会通过创建新列并运行更新语句来做到这一点...
解决方案
我自己没有尝试过这个,但是这是 /应该 /工作的步骤。这需要是C#/VB/ETC脚本。
- 更改类的定义,以包含类型DateTime的A / New /成员。
- 运行LINQ查询以加载表中的所有行,并运行A for循环,该循环将基于旧字符串变量填充新的DateTime变量。
- 将对象保存到表。 //现在您的表存储包含具有该变量的新定义的对象
- 从类定义中删除旧字段
- 再次从表中加载对象,并保存它们,除了将它们标记为脏外,都可以做任何事情。这个 /应该 /从桌子内的串行结构中摆脱旧成员。现在,如果您希望新的DateTime字段再次将原始字符串变量的名称命名为步骤1 Thru 5,这次将数据从一个字段移动到另一个字段。唯一的区别是您不必再次进行转换。
通常,这是一个完整的PITA,也是对象数据库和存储服务的范围之一。
其他提示
Azure表存储客户端本来可以理解DateTime(但不是DateTimeOffset),因此您可能需要考虑简单地让SDK为您处理此事。
否则,将数据表示为字符串的最佳方法是将其作为使用“ U”格式编写和解析的UTC值显式存储和检索,例如
var dateAsString = myDateTime.ToString("u");
我不知道它是否会起作用,但是您可以尝试“幸福的无知”:
真正的表存储实际上并不关心您的实体的形状(开发面料可能不同)。将您的实体属性更改为DateTime,但是在设置器测试中,值是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。
不隶属于 StackOverflow