【问题标题】:How can I convert a varchar field (YYYYMM) to a date (MM/01/YY) in SQL?如何在 SQL 中将 varchar 字段 (YYYYMM) 转换为日期 (MM/01/YY)?
【发布时间】:2011-07-05 13:16:49
【问题描述】:

我确信这很简单,但我已经坚持了一段时间。如何在 SQL 中将 varchar 字段 (YYYYMM) 转换为日期 (MM/01/YY)?

谢谢。

编辑:我使用的是 Open Office Base (HSQL),而不是 MySQL;很抱歉造成混乱。

【问题讨论】:

    标签: sql hsqldb openoffice.org


    【解决方案1】:

    试试str_to_datedate_format 函数。比如:

    select date_format( str_to_date( my_column, '%Y%c' ), '%c/01/%y' ) from my_table
    

    【讨论】:

      【解决方案2】:

      试试:

      SELECT STR_TO_DATE(CONCAT(myDate,'01'),'%Y%m%d') 
      FROM myTable
      

      【讨论】:

        【解决方案3】:

        使用 STR_TO_DATE:

        来自mysql.com

        STR_TO_DATE(str,format)

        这是 DATE_FORMAT() 函数的逆函数。它需要一个字符串 str 和一个格式字符串格式。如果格式字符串同时包含日期和时间部分,则 STR_TO_DATE() 返回 DATETIME 值;如果字符串仅包含日期或时间部分,则返回 DATE 或 TIME 值。

        str 中包含的日期、时间或日期时间值应以 format 指示的格式给出。有关可以在格式中使用的说明符,请参阅 DATE_FORMAT() 函数说明。如果 str 包含非法日期、时间或日期时间值,则 STR_TO_DATE() 返回 NULL。从 MySQL 5.0.3 开始,非法值也会产生警告。

        日期值部分的范围检查如第 11.3.1 节“DATETIME、DATE 和 TIMESTAMP 类型”中所述。这意味着,例如,允许“零”日期或部分值为 0 的日期,除非 SQL 模式设置为不允许此类值。

        mysql> SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y');
        -> '0000-00-00'
        mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');
        -> '2004-04-31'

        【讨论】:

          【解决方案4】:
          • 获取年份:

            SUBSTRING(field FROM 2 FOR 2)
            
          • 获取月份:

            SUBSTRING(field FROM -2 FOR 2)
            
          • 撰写日期:

            CONCAT(SUBSTRING(field FROM -2 FOR 2), '/01/', SUBSTRING(field FROM 2 FOR 2))
            

          这将从YYYYMM 转换为MM/01/YY

          【讨论】:

            【解决方案5】:

            要明确:如果您正在寻找将 Varchar/Text 类型的某些值转换为 Date 类型的值的方法,那么解决方案是:

            1. 使用CAST函数

            CAST(LEFT('201205',4)||'-'||SUBSTRING('201205' FROM 5 FOR 6)||'-01' AS DATE)

            1. 从 OpenOffice 3.4 (HSQLDB 2.x) 开始,新的类似 Oracle 的函数 TO_DATE 应该可用

            TO_DATE('201205','YYYYMM')

            除了书面我可以提到的是,您还可以使用 ANSI/ISO 'YYYY-MM-DD' 格式的日期表示构造一个字符串,- Base 将承认这一点并成功转换如有必要,将其转换为 Date 类型(例如,在 Date 类型的列中 INSERTing 等)

            这是HyperSQL 上的文档,Andrew Pitonyak 强烈推荐OO Base guide

            【讨论】:

              猜你喜欢
              • 2012-03-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-07-06
              • 1970-01-01
              • 1970-01-01
              • 2016-02-03
              相关资源
              最近更新 更多