[TL; DR] 只需使用:
TO_CHAr( tbl.col, 'IW' )
您有多个问题:
数据类型为“日期”
您调用
TO_DATE( string, format_model)了
DATE(不是
VARCHAR2),这将导致甲骨文做的隐式转换
DATE到
VARCHAR2使用
NLS_DATE_FORMAT会话参数作为格式的模型,所以您可以将其转换回
DATE。因此,您实际上在做:
TO_CHAr( TO_DATE( TO_CHAr( tbl.col, ( SELECt VALUE FROM NLS_SESSION_PARAMETERS WHERe PARAMETER = 'NLS_DATE_FORMAT' ) ), 'YYYY/MM/DD' ), 'IW')
不要这样做 ,只需使用:
TO_CHAr( tbl.col, 'IW' )
如果这样做,则以下问题无关紧要。
- 正如RealCheeseLord指出的那样,格式模型中的年和日的位置是相反的。和
- 您正在使用
YYYY
年格式模型,因此所有年份都将出现在公元1世纪。
范例 :
SELECt TO_CHAr( TO_DATE( '19-Jun-17', 'YYYY/MM/DD' ), 'YYYY-MM-DD' ) AS dtFROM DUAL
输出 :
DT----------0019-06-17
如果您不打算修复隐式字符串转换,那么您可能会想要:
TO_CHAr(TO_DATE(tbl.col,'DD-MON-YY'),'IW') AS week
或(取决于您希望99年是1999年还是2099年):
TO_CHAr(TO_DATE(tbl.col,'DD-MON-RR'),'IW') AS week
- 您正在将
MM
格式模型用于MON
格式化的数据-这不一定是MM匹配MON``MONTH的问题,但您可能应该使用正确的模型。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)