Oracle SQL:从日期中提取一年中的星期将得出随机结果

Oracle SQL:从日期中提取一年中的星期将得出随机结果,第1张

Oracle SQL:从日期中提取一年中的星期将得出随机结果

[TL; DR] 只需使用:

TO_CHAr( tbl.col, 'IW' )

您有多个问题:

  1. 数据类型为“日期”

您调用

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' )

如果这样做,则以下问题无关紧要。

  1. 正如RealCheeseLord指出的那样,格式模型中的年和日的位置是相反的。和
  2. 您正在使用
    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
  1. 您正在将
    MM
    格式模型用于
    MON
    格式化的数据-这不一定是MM匹配MON``MONTH的问题,但您可能应该使用正确的模型。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5649681.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存