如何在SQL中将varchar字段(YYYYMM)转换为日期(MM / 01 / YY)?

时间:2011-07-05 13:16:50

标签: sql hsqldb openoffice.org

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

感谢。

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

5 个答案:

答案 0 :(得分:3)

使用STR_TO_DATE:

来自mysql.com

  

STR_TO_DATE(STR,格式)

     

这是DATE_FORMAT()函数的反转。它采用字符串str和格式字符串格式。如果格式字符串包含日期和时间部分,则STR_TO_DATE()返回DATETIME值;如果字符串仅包含日期或时间部分,则返回DATE或TIME值。

     

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

     

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

     

的MySQL> SELECT STR_TO_DATE('00 / 00/0000','%m /%d /%Y');
   - > '0000-00-00'
  MySQL的>选择STR_TO_DATE('04 / 31/2004','%m /%d /%Y');
   - > '2004-04-31'

答案 1 :(得分:3)

尝试str_to_datedate_format功能。类似的东西:

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

答案 2 :(得分:3)

尝试:

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

答案 3 :(得分:1)

  • 获得年份:

    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

答案 4 :(得分:1)

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

  1. 使用 CAST 功能
  2. CAST(LEFT('201205',4)||'-'||SUBSTRING('201205' FROM 5 FOR 6)||'-01' AS DATE)

    1. 从OpenOffice 3.4(HSQLDB 2.x)开始,新的类似Oracle的功能 TO_DATE 应该可用
    2. TO_DATE('201205','YYYYMM')

      除了写的我可以提到你还可以构造一个字符串,用ANSI / ISO 'YYYY-MM-DD'格式化日期表示, - Base将承认并成功转换如有必要,它会转到Date类型(例如 INSERT in Date typed column等)

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