我确信这很简单,但我已经坚持了一段时间。如何在SQL中将varchar字段(YYYYMM)转换为日期(MM / 01 / YY)?
感谢。
编辑:我使用的是Open Office Base(HSQL),而不是MySQL;抱歉混淆。
答案 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_date和date_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 的值而不是解决方案的方法:
CAST(LEFT('201205',4)||'-'||SUBSTRING('201205' FROM 5 FOR 6)||'-01' AS DATE)
TO_DATE('201205','YYYYMM')
除了写的我可以提到你还可以构造一个字符串,用ANSI / ISO 'YYYY-MM-DD'格式化日期表示, - Base将承认并成功转换如有必要,它会转到Date类型(例如 INSERT in Date typed column等)
以下是HyperSQL上的文档,以及Andrew Pitonyak强烈推荐的OO Base guide