【问题标题】:automatically insertion database with counter reset within a day在一天内自动插入数据库并重置计数器
【发布时间】:2016-09-02 10:34:39
【问题描述】:

我有一个这样的 SQL Server 表

+----+-----------+------------+
| id |  account  |    date    |
+----+-----------+------------+
|    |  John     |  2016/6/2  | 
|    |  John     |  2016/6/2  | 
|    |  John     |  2016/6/2  | 
|    |  John     |  2016/6/4  | 
|    |  Andi     |  2016/6/4  | 
|    |  Steve    |  2016/6/2  | 
+----+-----------+------------+

问题是我想按日期自动插入“id”列,并将日期更改为字符串,如 datatype(char/varchar) 并在末尾添加增量 3 位计数器(从 001 开始)重置每天计数器(日期更改时重置,但如果日期相同,可能会继续最后一个计数器)。 示例:

+-------------+---------+-----------+
|     id      | account |    date   |
+-------------+---------+-----------+
| 20160602001 | John    |  2016/6/2 | 
| 20160602002 | John    |  2016/6/2 | 
| 20160604003 | John    |  2016/6/2 | 
| 20160604001 | John    |  2016/6/4 | >counter reset when the date is change
| 20160604002 | Andi    |  2016/6/4 | 
| 20160604004 | Steve   |  2016/6/2 | >counter continue 
+-------------+---------+-----------+

我想在 oracle sql developer 中制作它,有人可以帮我吗? 我一直在考虑在纯数据库查询中尝试这个可能吗? (可以添加更多列或修改一点,只要“id”列保持我需要的状态)还是需要在 C#(ASP.NET)中创建一个函数来执行此操作?因为这是我非常了解的一个,有人可以帮我解决这个问题吗?谢谢=)

【问题讨论】:

  • 您有一个 SQL Server 表,并且想在 Oracle SQL Developer 中对其进行处理?它是如何工作的?

标签: c# asp.net sql-server oracle oracle-sqldeveloper


【解决方案1】:

假设这是甲骨文:

如果您的表已经存在,并且您要显示列,并且您想要填充列 ID,您可以使用如下所示的 UPDATE 语句来完成。我使用了表名“t” - 您需要将其更改为您在查询中出现的任何地方的实际表名。我还将日期列称为 dt(使用 Oracle 关键字作为表名或列名总是一个坏主意);如果您的列确实称为“日期”,则必须将 dt 替换为“日期”(包括双引号)。

update t set id = 
    (with h(dt,rn) as 
        (select dt, row_number() over (partition by trunc(dt) order by dt) from t)
     select to_char(dt, 'yyyymmdd') || to_char(rn, 'FM009') from h where h.dt = t.dt)

这假定“日期”列是真正的日期列,具有时间分量,并且没有“日期”是相等的(同一天的时间分量对于所有记录都是不同的)。否则 select 语句返回多于一行,插入将失败。在这种情况下,你需要解释你想如何打破这种关系; insert 语句会稍微复杂一些。

【讨论】:

    【解决方案2】:

    您可以为日期和 ID 创建单独的列。插入行时只需获取当天的最大 id,如果不存在,则从 1 开始。如果确实需要,可以为 date + id 字段创建一个额外的计算列,但在表中你应该保留他们分开了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      相关资源
      最近更新 更多