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

Posted

技术标签:

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

我确信这很简单,但我已经坚持了一段时间。

谢谢。

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

【问题讨论】:

【参考方案1】:

试试str_to_date 和date_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 类型的值的方法,那么解决方案是:

    使用CAST函数

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

    从 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

【讨论】:

以上是关于如何在 SQL 中将 varchar 字段 (YYYYMM) 转换为日期 (MM/01/YY)?的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 2008 中将数据从浮点类型的 Excel 导入 varchar

如何在sql中将带时区的varchar转换为日期时间

如何在 SQL 中将 varchar2 转换为数字

如何在 SQL Server 中将 varchar 数据转换为时间

如何在 SQL 条件中将 INT 转换为 VARCHAR [重复]

SQL SERVER中某个字段属性为varchar,我想把这个字段改成int型,如何操作?