【问题标题】:Converting date and time TEXT fields to one INT unix timestamp field in SQL将日期和时间 TEXT 字段转换为 SQL 中的一个 INT unix 时间戳字段
【发布时间】:2020-12-01 11:14:06
【问题描述】:

我目前有一个带有两个 TEXT 字段的 mySQL 数据库:DateTime。它们的格式分别为“dd/mm/yyyy”和“0:00”,例如“11/08/2020”和19:12。我想创建一个名为Timestamp(INT 类型)的第三个字段,并将两个原始字段转换为此时间戳字段并删除日期/时间文本字段。

我对使用 UNIX_TIMESTAMP() 和 STR_TO_DATE() 进行了一些研究,但我似乎无法让它工作,格式似乎是错误的。

如何在 SQL 中实现这一点,并将表示日期和时间的两个字符串字段转换为第三个字段来替换它们,它们都只存储 unix 时间戳?

这是我迄今为止最好的尝试..

SELECT UNIX_TIMESTAMP(STR_TO_DATE(CONCAT(`InfractionDate`, " ", `InfractionTime`), '%d %M %Y %h:%i%p')) FROM `playerinfractions`

该表名为playerinfractions,日期/时间存储在文本字段InfractionDateInfractionTime中。

非常感谢!

【问题讨论】:

    标签: mysql sql datetime unix timestamp


    【解决方案1】:

    您在函数STR_TO_DATE()中使用的格式模式错误。
    试试这个:

    SELECT 
      UNIX_TIMESTAMP(
        STR_TO_DATE(
          CONCAT(`InfractionDate`, ' ', `InfractionTime`), 
          '%d/%m/%Y %H:%i')
      )     
    FROM `playerinfractions`
    

    【讨论】:

    • 是的,这有效,谢谢!我之前已经尝试过使用斜线,但它没有用。似乎将 %M 更改为 %m 并且 %h 和 %H 有所不同。
    • m 用于两位数月份,H 用于 24 小时格式。检查我的答案中函数 STR_TO_DATE() 的链接以获取正确的格式。
    • 我将如何运行查询以更新所有字段以成为该查询的结果?如果我运行这个:UPDATE playerinfractions` SET InfractionIssuedTimestamp = (SELECT UNIX_TIMESTAMP(STR_TO_DATE(CONCAT(InfractionDate, " ", InfractionTime), '%d/%m/%Y %H:%i' )) FROM playerinfractions);` 它找到所有行并给出错误 #1242 - 子查询返回超过 1 行。我会在这里考虑什么样的 WHERE 子句?
    • 不需要选择:SET InfractionIssuedTimestamp = UNIX_TIMESTAMP(STR_TO_DATE(CONCAT(InfractionDate, " ", InfractionTime), '%d/%m/%Y %H:%i'))
    • 啊,我明白了,我在想也许子查询不是要走的路,再次感谢您!
    【解决方案2】:

    你需要告诉 STR_TO_DATE 你的日期和时间的正确格式,你建议是'%d/%m/%Y %H:%i'

    SELECT UNIX_TIMESTAMP( 
                STR_TO_DATE( 
                    CONCAT('10/08/2020', ' ', '12:20'), '%d/%m/%Y %H:%i' ) 
                )
            )
    FROM `playerinfractions`
    

    所以使用你的专栏

    SELECT UNIX_TIMESTAMP( 
                STR_TO_DATE( 
                    CONCAT(`InfractionDate`, ' ', `InfractionTime`), '%d/%m/%Y %H:%i' ) 
                )
            )
    FROM `playerinfractions`
    

    【讨论】:

      【解决方案3】:

      我尝试以以下格式将字符串传递给相同的函数并且它有效。您也可以分享您的格式以进一步检查。

      select UNIX_TIMESTAMP(STR_TO_DATE(CONCAT('8/12/2020',' ', '12:01:49' ),'%m/%d/%Y %h:%i:%s'))
      

      【讨论】:

        猜你喜欢
        • 2020-03-23
        • 1970-01-01
        • 2022-01-23
        • 2019-07-21
        • 2016-06-07
        • 2020-11-30
        • 2021-04-07
        • 1970-01-01
        • 2019-07-30
        相关资源
        最近更新 更多