如何在SQL中使用WHEN子句为7位日期字符串补前导零
为字符串日期列补前导零的解决方案
你的dates_stamp是字符串类型,不能用数字范围判断,而且原语句里的字符串拼接语法也不对,以下是修正后的写法,适配不同SQL数据库:
MySQL/MariaDB 版本
SELECT CASE WHEN LENGTH(dates_stamp) = 7 THEN CONCAT('0', dates_stamp) WHEN LENGTH(dates_stamp) = 8 THEN dates_stamp ELSE 'FAIL' END AS formatted_date FROM table1;
SQL Server 版本
SELECT CASE WHEN LEN(dates_stamp) = 7 THEN '0' + dates_stamp WHEN LEN(dates_stamp) = 8 THEN dates_stamp ELSE 'FAIL' END AS formatted_date FROM table1;
PostgreSQL 版本
SELECT CASE WHEN LENGTH(dates_stamp) = 7 THEN '0' || dates_stamp WHEN LENGTH(dates_stamp) = 8 THEN dates_stamp ELSE 'FAIL' END AS formatted_date FROM table1;
说明
- 直接通过字符串长度判断:长度为7时补前导零,长度为8时保持原字符串,其他长度返回'FAIL'
- 原写法错误点:把字符串类型的列当作数字用
BETWEEN判断,且用逗号做字符串拼接是无效语法,需用对应数据库的字符串拼接函数/运算符
内容的提问来源于stack exchange,提问作者hamesjendo
相关产品推荐
相关产品推荐

