【问题标题】:Help to convert PostgreSQL dates into SQL Server dates帮助将 PostgreSQL 日期转换为 SQL Server 日期
【发布时间】:2010-05-26 20:15:50
【问题描述】:

您好,我正在做一些从 PostgreSQL 到 Microsoft SQL Server 的数据转换。到目前为止一切顺利,我几乎运行了整个数据库转储脚本。现在只有一件事搞砸了:日期。

日期转储为字符串格式。这是我目前看到的两种示例格式:'2008-01-14 12:00:00' 和更精确的'2010-04-09 12:23:45.26525'

我想要一个可以运行的正则表达式(或一组正则表达式),以便将这些替换为 SQL Server 兼容的日期。有谁知道我该怎么做?

【问题讨论】:

    标签: sql-server regex datetime


    【解决方案1】:

    第一个兼容datetime,但是第二个太精确了。它将适合sqldatetime2,可从 SQL Server 2008 获得:

    select cast('2008-01-14 12:00:00' as datetime)
    ,      cast('2010-04-09 12:23:45.26525' as datetime2)
    

    对于较早的版本,您可以使用substring 来切断无法存储的精度:

    select cast(substring('2010-04-09 12:23:45.26525',1,23) as datetime)
    

    对于一个正则表达式来删除任何额外的数字(使用 perl 正则表达式语法):

    (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3})\d*
    

    并替换为:

    $1
    

    () 括号之间的正则表达式部分匹配。

    【讨论】:

    • 将我们的日期时间列更改为 sqldatetime2 不是一种选择。我们不需要额外的精度,只是时间戳是 PostgreSQL 中唯一的 datetime-ish 格式
    • @Earlz:如果您不需要额外的精度,请使用substring 将其删除。 SQL Server 可识别 HH:mm:ss.fff 格式(以微秒为单位)
    • 是的,但您的解决方案并不完整。我正在处理一个数千行文件。什么是匹配这个日期的正则表达式,所以我可以用 cast(substring... 位替换它?
    • @Earlz:SQL Server 不支持正则表达式...您希望用什么语言来替换正则表达式?你试过 SQL Server 的文本导入向导,相当强大吗?
    • @Ando no 我有一个巨大的文本文件,其中包含从 PostgreSQL 数据库转储的 SQL 代码。我正在转换文本,以便可以将数据从 Postgres 恢复到 SQL Server。正则表达式只需要在文本编辑器中运行。
    猜你喜欢
    • 2014-08-09
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多