【问题标题】:sql removing part of a string to format a datesql删除部分字符串以格式化日期
【发布时间】:2013-02-07 16:47:34
【问题描述】:

我从工作人员那里继承了一个数据库,他们将所有日期都存储在 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 标准格式

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

【问题讨论】:

  • 看起来像 PHP 的 strtotime() 函数的有效格式 - 它将数据转换为时间戳(整数),然后您可以使用 date('Y-m-d h:i:s', $iTimestamp) 之类的东西重新格式化并使用它来更新 MySQL 表...那么它已经是正确的格式,所以应该可以只转换数据类型。不过,这只是暂时的理论,我还没有测试过。
  • 列的格式是否完全统一?还是可能存在差异,例如额外的空格/填充、缺少逗号等?
  • 它是完全统一的。它是由格式化变量插入的

标签: php sql sql-server regex tsql


【解决方案1】:

不完整,但这是我的处理方式:

  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. 再次尝试转换

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

  3. 删除旧列

  4. 重命名新列

【讨论】:

  • 我会做类似的事情。
【解决方案2】:

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)

【讨论】:

  • 我收到此错误:参数数据类型 varbinary 对 patindex 函数的参数 2 无效。
  • 那么 submit_date 是 varbinary,而不是 varchar?
  • 是的,只是需要对 varchar 进行额外的强制转换。如上。你是这样做的吗?
【解决方案3】:

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

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

SQL Fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多