Teradata中使用REGEXP_REPLACE转换日期格式报错求助
解决Teradata中REGEXP_REPLACE日期格式转换问题
报错原因
你的语句报错是因为正则匹配模式没有用单引号包裹。Teradata要求REGEXP_REPLACE的第二个参数(匹配模式)必须是字符串常量,所以[0-9]{8}需要加上单引号,写成'[0-9]{8}'。
不过需要注意:你当前的写法会把'20230320'这个已经是YYYYMMDD格式的字符串直接替换成'YYYYMMDD',这显然不符合你“转换为YYYYMMDD格式”的需求,说明你可能误解了REGEXP_REPLACE的用法。
正确实现方式
场景1:输入是其他格式的日期字符串(如带分隔符)
如果你的输入是带分隔符的日期(比如'2023-03-20'、'03/20/2023'),优先使用Teradata专用的日期函数组合,比正则更可靠:
- 对于
'2023-03-20'格式:
SELECT TO_CHAR(TO_DATE('2023-03-20', 'YYYY-MM-DD'), 'YYYYMMDD');
- 对于
'03/20/2023'格式:
SELECT TO_CHAR(TO_DATE('03/20/2023', 'MM/DD/YYYY'), 'YYYYMMDD');
场景2:必须用正则处理(如多种分隔符混合)
如果输入存在多种分隔符(比如既有-又有/),可以用REGEXP_REPLACE去掉所有非数字字符,得到YYYYMMDD格式:
SELECT REGEXP_REPLACE('2023/03-20', '[^0-9]', '') AS yyyymmdd;
这里'[^0-9]'匹配所有非数字字符,替换为空,最终得到8位数字的日期字符串。
修正你原语句(仅解决报错,无实际转换意义)
如果只是要修正报错,语句应为:
SELECT RegExp_Replace('20230320','[0-9]{8}','YYYYMMDD');
但此语句会将原日期替换成字符串'YYYYMMDD',实际业务中很少用到,仅作语法参考。
内容的提问来源于stack exchange,提问作者PK39565
相关产品推荐
相关产品推荐

