如何让Oracle的to_timestamp()支持逗号作为时间戳小数分隔符
解决Oracle TO_TIMESTAMP接受逗号作为小数秒分隔符的问题
你可以通过两种方式让TO_TIMESTAMP接受逗号作为小数秒的分隔符,无需手动修改数千条INSERT语句:
方法一:修改会话级NLS参数(推荐批量处理)
在执行所有INSERT语句前,先执行以下SQL设置会话的数值格式参数:
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.';
这个参数的格式为<小数分隔符><千位分隔符>,将小数分隔符设为逗号后,TO_TIMESTAMP会自动把字符串中的逗号识别为小数秒的分隔符,匹配你指定的RR/MM/DD HH24:MI:SSXFF格式串,原有INSERT语句无需修改即可正常执行。
方法二:在TO_TIMESTAMP中直接指定NLS参数
如果不想修改会话设置,可以在每个TO_TIMESTAMP调用中添加第三个参数,明确指定小数分隔符:
to_timestamp( '21/01/17 23:34:50,000000000', 'RR/MM/DD HH24:MI:SSXFF', 'NLS_NUMERIC_CHARACTERS='',.''' )
注意这里的单引号需要用两个单引号转义,确保Oracle能正确解析参数内容。
验证效果
执行上述任一设置后,你的原有INSERT语句将不再抛出ORA-01830错误,时间戳字符串会被正确转换为Oracle的TIMESTAMP类型。
内容的提问来源于stack exchange,提问作者aretai
相关产品推荐
相关产品推荐

