如何在TSQL中将YYYY/MM/DD格式字符串转为当年1月1日?
解决方法
你的错误核心是SQL里字符串常量要用单引号,双引号会被解析成列名,所以"01"被当成了不存在的列,才会报错。针对你的需求,给你几种可行的写法:
方法1:利用日期函数提取年份后拼接
先把varchar转成datetime类型提取年份,再拼接成当年1月1日的日期字符串,最后转回日期类型:
SELECT CAST(CONCAT(YEAR(CONVERT(datetime, empDate, 111)), '/01/01') AS DATE) FROM empTable;
如果需要返回的是YYYY/MM/DD格式的字符串而非日期类型,去掉CAST(...) AS DATE即可:
SELECT CONCAT(YEAR(CONVERT(datetime, empDate, 111)), '/01/01') FROM empTable;
方法2:直接截取原字符串(更高效)
因为你的原列是固定的YYYY/MM/DD格式,直接截取前4位年份,拼接/01/01就行,不用转日期,性能更好:
-- 返回日期类型 SELECT CAST(LEFT(empDate, 4) + '/01/01' AS DATE) FROM empTable; -- 返回字符串格式 SELECT LEFT(empDate, 4) + '/01/01' FROM empTable;
补充说明
- 所有SQL方言里,字符串常量都应该用单引号
',双引号"默认用于引用标识符(比如列名、表名),这是你之前报错的根本原因。 - 如果是MySQL环境,语法略有不同,把
CONVERT(datetime, empDate, 111)换成STR_TO_DATE(empDate, '%Y/%m/%d')即可,核心逻辑保持一致。
内容的提问来源于stack exchange,提问作者aka baka
相关产品推荐
相关产品推荐

