如何将VARCHAR类型的yyyy-mm格式数据转换为日期类型?
处理VARCHAR(7)格式日期列的查询问题
快速解决:补全日后缀或直接字符串比对
你的MONTH列是yyyy-mm格式的字符串,要转成日期格式很简单——直接拼接-01补全日部分,就能用CONVERT转换为合法日期:
SELECT * FROM TABLE_X WHERE CONVERT(DATE, MONTH + '-01') BETWEEN '2022-06-01' AND '2023-06-01'
其实还有更省事的方式:因为yyyy-mm的字符串本身是按时间顺序排列的,直接做字符串范围比对就行,不需要转换日期。另外你原来的BETWEEN语法有误,正确写法是:
SELECT * FROM TABLE_X WHERE MONTH BETWEEN '2022-06' AND '2023-06'
长期优化:修改列类型
如果这个表频繁做日期相关查询,建议把MONTH列改成DATE类型,避免每次查询都做字符串转换,提升效率。步骤如下:
- 先给现有数据补全日部分:
UPDATE TABLE_X SET MONTH = MONTH + '-01';
- 修改列类型:
ALTER TABLE TABLE_X ALTER COLUMN MONTH DATE;
内容的提问来源于stack exchange,提问作者NOLA_Max
相关产品推荐
相关产品推荐

