如何在 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 Server 中将 varchar 数据转换为时间