给定一个带有DateTime列的SQL表和过去3年中大约10万行不同日期(本地时间PST值),将这些列值迁移到DateTimeOffset以"添加"缺少的utc tz偏移信息的最佳策略是什么?
已存储的现有DateTime值没有任何时区/ utc偏移详细信息.存储的日期始终代表太平洋时间(-800或-700,具体取决于夏令时).目标是追溯将tz偏移量添加到所有现有数据,并假设日期来自太平洋时间(无论正确的偏移量是在日期指定的时刻)
在SQL中,这种类型的迁移的最佳实践是什么,而不会丢失任何数据或更改现有值?
进入下一步,迁移整个中等大小的数据库(在100个表中约100gb,每个表有2个DateTime列)的最有效方法是什么才能使用DateTimeOffset列和值?
在PST/PDT转换日期的凌晨2点/期间记录的日期时间会发生什么变化?是否会发生数据丢失?
SQL Server 2008 + C#4.5
如果这不是正确的方面,请指出我正确的方向,谢谢!
编辑:耶,赏金时间.
Cliffs:是否存在将标准"过滤器"类型传递给存储过程以封装stardate/enddate/pagesize/pagenum参数的已知模式?
不确定这个问题的正确位置.我正在探索将过滤对象参数传递给存储过程的想法,该存储过程封装了我们常用的过滤参数(startdate,enddate,pagenumber,pagesize,int的列表等).这样做的原因是减少了类似参数的数量以及围绕我们程序传播的样板SQL.这将从一开始就为每个程序提供更标准的界面和起点.我无法找到有关该主题的更多信息.
模式我注意到 - 当第一次构建大多数SP时,它们以where子句中使用的单个id参数开始.稍后,您可能需要为日期范围参数添加参数(startdate,enddate或dynamic range"ytd,mtd,dtd").如果数据集足够大,您还可能需要为服务器端分页引入pagesize/pagenum.一段时间后,您可能会发现需要结果来获取id的列表而不是单个id,因此您需要添加CSV或XML参数来包含ID.
最终,许多存储过程最终会有许多类似的样板和(希望)相同的参数来处理这些标准过滤参数.我正在尝试研究用于将封装的过滤器对象参数传递给我的过程的已知模式,理想情况下,它将在C#端强类型化.这在管理一组程序时特别有用,这些程序为所有需要相同过滤选项的报告提供动力(除了特定于报告的查询参数).
我的目标是减少WHERE子句所需的最小参数所需的参数数量,并创建一个标准机制,用于将通用过滤选项传递到过程中,并在过程内部使用这些值.如何通过XML或CLR或UDT参数实现这一目标?
对于这个问题的上下文,我通过C#2.0中的ADO.Net使用SQL Server 2008.不幸的是,LINQ/EF目前还不是这个项目的选项,我们必须坚持使用现有的RDBMS.如果存在需要改变技术的已知模式,我将有兴趣听到它.
编辑:感谢目前为止的回复.我已经为50分钟增加了一笔赏金,我会让它再跑几天,试图促进更多的讨论.如果我的问题不够明确,请发表评论..
我有一个.Net Regex表达式,它从字符串中提取所有有效的Url.它通过我的所有20个单元测试,除了一个:当Url包含问号时.这导致正则表达式引擎挂起进程并造成严重破坏.
我在这个表达上花了很多时间,但我不确定如何解决这个问题.希望一个正则表达式专业人士可以伸出援助之手!两部分问题:
1)如何改进此正则表达式模式,以便在评估字符串" http://www.example.com/?a=1 " 时不会挂起:
正则表达式模式:
(?<URL>(\s|^)((?<Scheme>[A-Za-z]{3,9})[:][/][/])?([A-Za-z0-9-]+[.])+([A-Za-z]+){2,4}(?(Scheme)|[/])(((?:[\+~%\/.\w-_]*[/]?)?\??#?(?:[\w]*))?)*(\s|$))
Run Code Online (Sandbox Code Playgroud)
我建议使用这个很棒的在线.Net Regex测试引擎:http://regexhero.net/tester/
2)我的呼叫代码可以做些什么来阻止/恢复正则表达式引擎挂起?这是调用代码:
Regex linkParser = new Regex(UrlMatchRegex, RegexOptions.Compiled | RegexOptions.IgnoreCase);
// Find matches and add them to the result
foreach (Match m in linkParser.Matches(message))
{
result.Add(m.Value.Trim());
}
Run Code Online (Sandbox Code Playgroud)
我花了相当多的时间在这个特殊的Regex模式上,并尝试了至少7个我发现的替代品(包括本页的大部分内容:http://mathiasbynens.be/demo/url-regex).我宁愿改进我现有的模式,而不是使用完全不同的模式,但我愿意选择.
最终正则表达式v1:
经过一些修改,在下面的帮助下,我的最终正则表达式匹配如下所示:
(?<URL>((?<=\s)|^)((?<Scheme>[A-Za-z]{3,9})[:][/][/])?([A-Za-z0-9-]+[.])+[A-Za-z]{2,4}(?(Scheme)|[/]?)(((?:[\+~%\/.\w-_]*[/]?)?\??#?&?(?:[\w=]*))?)*((?=\s)|$))
Run Code Online (Sandbox Code Playgroud)
**Regex v2:已更新,包含域名,端口号,主题标签的集合列表,但不包含尾随斜杠
(?<URL>((?<=\b)|^)((?<Scheme>[A-Za-z]{3,9})[:][/][/])?([A-Za-z0-9-]+[.])+((?<TLD>\b(aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mn|mn|mo|mp|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|nom|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ra|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw|arpa)\b))+(\/?)+((((?:[:\+~%/.\w-_\/])?[\?]?[#]?[&]?(?:[\w=]*))?)+(?=\?|\b)))
Run Code Online (Sandbox Code Playgroud)
测试用例:这是对#的测试
不应该匹配:
like when you a/b test something
this sentence ends with a/
just a #hashtag
Run Code Online (Sandbox Code Playgroud)
应该匹配:
sos.me extra
sos.me. extra <-- not period
sos.me, extra <-- not comma …Run Code Online (Sandbox Code Playgroud)