求SQL Server中对应Oracle TO_DATE的MM/YY转日期方法
在SQL Server中实现MM/YY转日期(自动补当月第一天)
针对你需要把MM/YY格式字符串转为日期(自动补当月第一天)且处理无效数据的需求,给你几个SQL Server专属的简便方案:
方案1:用TRY_CONVERT快速转换
利用TRY_CONVERT函数自动处理无效数据(无效格式返回NULL,不会报错),先把MM/YY补全为MM/01/YY格式,再用对应样式转换:
SELECT TRY_CONVERT(DATE, LEFT(TRIM(your_column), 2) + '/01/' + RIGHT(TRIM(your_column), 2), 101) AS ConvertedDate FROM dbo.TABLE
- 样式
101对应MM/DD/YYYY格式,TRY_CONVERT会自动识别两位年份(遵循SQL Server默认规则:00-49对应2000-2049,50-99对应1950-1999) - 无效数据(比如
13/05、08/XX)会返回NULL,不会中断查询
方案2:用TRY_DATEFROMPARTS精准控制
如果需要更精准控制两位年份的世纪映射(和Oracle规则完全对齐),可以拆分月份和年份后用TRY_DATEFROMPARTS:
SELECT TRY_DATEFROMPARTS( -- 模拟Oracle两位年份规则:00-49→2000-2049,50-99→1950-1999 CASE WHEN CAST(RIGHT(TRIM(your_column), 2) AS INT) BETWEEN 0 AND 49 THEN 2000 + CAST(RIGHT(TRIM(your_column), 2) AS INT) ELSE 1900 + CAST(RIGHT(TRIM(your_column), 2) AS INT) END, CAST(LEFT(TRIM(your_column), 2) AS INT), 1 -- 固定当月第一天 ) AS ConvertedDate FROM dbo.TABLE
- 这个方案会严格按照Oracle的两位年份逻辑转换,同时
TRY_DATEFROMPARTS遇到非法月份(如13)、非数字年份时会返回NULL,避免报错
对比你之前的方法
你之前的拼接方式直接生成DD-MM-YY字符串,容易因数据库语言/日期格式设置导致转换失败,且没有处理无效数据的容错机制,以上两种方案都解决了这些问题。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

