0

我从工作人员那里继承了一个数据库,他们将所有日期存储在 VARCHAR() 中。通常我会把它转换成日期时间然后继续。但它以“2012 年 6 月 19 日星期二上午 11:46:40”的格式存储我正在使用 PHP 和 SQL 中的一些脚本和日期比较,我需要将其设为可用日期。

我尝试以这种方式转换它:通过获取旧日期并将其转换为一个单独的字段,我将在转换时重命名该字段。当我运行它时,我得到一个错误

 UPDATE ticket_backup
    SET new_date = CONVERT(VARCHAR(50), CAST(submit_date AS DATETIME), 109)

从二进制/varbinary 字符串转换日期时间时转换失败。

所以现在我想我需要使用正则表达式删除一个子字符串来删除我不需要的东西。我需要将其转换为“2013-02-07 11:28:51”的 SQL 服务器 DATETIME 标准格式

任何帮助将不胜感激,因为我遇到了障碍并且我需要转换很多记录。

4

3 回答 3

2

不完整,但这就是我将如何处理它:

  1. 创建一个新的日期列
  2. 更新所有当前值以摆脱白天部分...

    update mytable set mydate = replace(mydate, 'Monday, ', '' );

    update mytable set mydate = replace(mydate, 'Tuesday, ', '' );

等等

  1. 删除那个'at'字

    update mytable set mydate = replace(mydate, ' at ', '' );

  2. 再次尝试转换

    UPDATE ticket_backup SET new_date = CONVERT(VARCHAR(50), CAST(submit_date AS DATETIME), 109)

  3. 删除旧列

  4. 重命名新列
于 2013-02-07T16:52:29.550 回答
1

SQL 日期.. 总是很有趣!试试这个,只要所有行的格式与您的演示行相同(例如,一天后的逗号),就应该可以工作:

UPDATE ticket_backup
    SET new_date = CAST(REPLACE(SUBSTRING(CAST(submit_date as varchar(50)) ,
            PATINDEX('%,%',CAST(submit_date as varchar(50)) )+2 ,LEN(CAST(submit_date as varchar(50)) )),'at ', '') as datetime)
于 2013-02-07T17:01:22.080 回答
1

这是可以完成的一种方法,就像我认为可以做到的那样简单:

SELECT CONVERT(DATETIME,REPLACE(RIGHT(submit_date,LEN(submit_date)-CHARINDEX(',',submit_date)),' at ',' '),109)

SQL小提琴

于 2013-02-07T17:09:37.593 回答