1

我有一个ID我在 asp.net vb 应用程序和 SQL Server 中创建的,其格式为MM/YYYY/### 是整数。随着用户生成表单,该整数在整个月内递增 1,因此目前它是08/2013/39.

我用于此的代码如下

    Dim get_end_rfa As String = get_RFA_number()
    Dim pos As Integer = get_end_rfa.Trim().LastIndexOf("/") + 1
    Dim rfa_number = get_end_rfa.Substring(pos)
    Convert.ToInt32(rfa_number)
    Dim change_rfa As Integer = rfa_number + 1

    Dim rfa_date As String = Format(Now, "MM/yyyy")

    Dim rfa As String = rfa_date + "/" + Convert.ToString(change_rfa)

    RFA_number_box.Text = rfa

Public Function get_RFA_number() As String
    Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("AnalyticalNewConnectionString").ConnectionString)
    conn.Open()
    Dim cmd As New SqlCommand("select TOP 1 RFA_Number from New_Analysis_Data order by submitted_date desc", conn)
    Dim RFA As String = (cmd.ExecuteScalar())
    conn.Close()
    Return RFA
End Function

我需要在每个月初将整数重置为 1。我该怎么做?

4

3 回答 3

1

从表中选择 max(record),并将 currentDate 与记录的 Date 进行比较。当它们不同时。重置 ID = 1 。像这样的SQL

select ID, recordDate 
from TABLE
where ID = (select max(ID) from TABLE) 
where datename(YYYY ,getdate()) = datename(YYYY ,recordDate()) 
and datename(MM ,getdate()) = datename(MM ,recordDate()) 
于 2013-08-29T11:39:02.787 回答
0

结合上面的答案和一些进一步的研究,我正在使用下面的代码。这解决了我的查询。

declare @mydate as date

    set @mydate = CONVERT(char(10), GetDate(),103)
    if convert(char(10), (DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)), 126) = CONVERT(char(10), GetDate(),126)
    select right(convert(varchar, @mydate, 103), 7) + '/01'
    else
    select TOP 1 RFA_Number 
    from New_Analysis_Data 
    order by submitted_date desc
于 2013-08-29T13:41:06.083 回答
0

@very9527 的方法有效 (+1),但 datepart 操作很尴尬。基于原始代码的另一个选项的概述:

  • 从数据库中获取最新的值,get_end_rfa
  • 将最左边的 7 个字符与“now”值进行比较,rfa_date
  • 如果它们相等,则为同一年/月,第一项已创建,使用递增值
  • 如果它们不相等,这是一个新的月份,并且该月份的“第一个”项目尚未设置,所以用 1 重新设置它

你需要担心并发吗?如果两个实例同时尝试添加“下一个”值会发生什么?

于 2013-08-29T13:58:05.737 回答