【问题标题】:Getting custom linear unique id in oracle in select statement based on Date在基于日期的选择语句中获取oracle中的自定义线性唯一ID
【发布时间】:2012-05-21 16:24:54
【问题描述】:

我有一个这样的 oracle 表。

我想在 select 语句中获取格式为 Mon-YY/唯一编号的自定义唯一 ID

结果看起来像(见 UNIQUEORDERID 列)

是否可以在select语句中实现结果? 请帮我写查询。

谢谢, 萨贾德

【问题讨论】:

  • 如果您添加一个月的记录,您期望会发生什么?它可以更改该月所有其他行的 ID
  • @A.B.Cade -> 它不会改变..因为日期是按顺序插入的..
  • 假设您插入了另一行:560, c++, 4/15/2012 10:32,那么它将获得 id Apr-12/001,并且记录 547 现在将是 Apr-12/002。所有对该记录的引用都是错误的。我看不出你将如何使用在 SELECT ... 上生成的 ID ...
  • 是的..我的代码限制要插入的日期为前一个日期..它总是采用当前日期时间..生成的 ID 仅用于在 UI 中显示(根据客户要求)。 .在代码中,我们将使用实际的 request_id..如果后端没有进行任何数据更改..结果将始终相同
  • Y3K 问题,马上来:)

标签: oracle datetime


【解决方案1】:

试试这个 -

SELECT REQUEST_ID,
       NAME_OF_TRAINING,
       APPLIED_DATE,
       to_char(APPLIED_DATE,'MON-YY') || '/' || ROW_NUMBER over (partition by to_char(APPLIED_DATE,'MON-YY') order by to_char(APPLIED_DATE,'MON-YY')) AS UNIQUEORDERID
FROM tablename;

【讨论】:

  • Junaid..这将再次返回我一个序列..即 Apr-12/1 ,2,3 ..... 但我预计结果将基于月份..即在下个月它的 May-12/001 而不是 May-12/003(根据您的查询)
  • 您必须获取 ROW_NUMBER() OVER(PARTITION ON to_char(APPLIED_DATE,'MON-YY'))。但我认为这会影响性能。
【解决方案2】:
SELECT request_id,
       name_of_training,
       applied_date,
       to_char(applied_date,'MON-YY') || 
               '/' || 
               to_char(row_number() over (partition by to_char(applied_date,'MON-YY'), '000')
               ) AS UNIQUEORDERID
FROM tablename;

【讨论】:

    【解决方案3】:
    select a.*,to_char(a.applied_date,'MON-YY')||a.request_id UNIQUEORDERID
    from table_name a; 
    

    编辑 将其转换为您的数据

    select object_name
    ,to_char(created,'MON-YY')||'/'||row_number() over (partition by to_char(created,'MON-YY') order by to_char(created,'MON-YY'))
    from user_objects;
    

    【讨论】:

    • 这只会将'MON-YY'与requestid连接起来......我想要的是每个月从001开始......所以我不希望它是Apr-12/547但是应该是 Apr-12/001 /002 等 4 月份..
    猜你喜欢
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 2017-05-14
    • 2023-04-08
    • 1970-01-01
    • 2020-08-16
    相关资源
    最近更新 更多