【发布时间】:2015-10-30 03:30:32
【问题描述】:
我有一个tickets 的表,其中有一个名为ticket_number 和date 的列,其中包含创建日期。
该表中的数据:
ticket_number | date
150910.001 2015/09/10
150910.002 2015/09/10
150911.001 2015/09/11
150911.002 2015/09/11
150911.003 2015/09/11
我想创建一个基于日期创建ticket_number 的SQL 函数。如果日期不同,则最后 3 位再次重置为 001。
我在编写返回此类信息的 SQL 查询时遇到问题。
到目前为止,我已经尝试过:
CREATE FUNCTION FcNoTicket(@date as datetime)
RETURNS CHAR(10)
AS
BEGIN
DECLARE @newNumber char(10),@date_k char(7), @ticketNo as int
SELECT @date_k = RIGHT(Year(@date),2)+RIGHT('00'+CONVERT(NVARCHAR(2),DATEPART(MONTH,@date)),2)
+RIGHT('00'+CONVERT(NVARCHAR(2),DATEPART(day,@date)),2)+'.' from tickets
SELECT @ticketNo=ROW_NUMBER() OVER(PARTITION BY @date ORDER BY @date)
from ticket
SET @newNumber=@date_k+right('00'+cast(@ticketNo+1 as varchar(3)),3)
RETURN @newNumber
END
该代码返回连续增量。
有人对如何做到这一点有任何想法吗?
【问题讨论】:
-
一次生成这个比多次调用函数更好。
-
你能做示例查询吗?感谢您的建议:)
-
所以当您开始时
ticket_number字段为空? -
是的,这取决于日期。所以我有存储过程来首先填写日期。然后我调用函数来获取ticket_number
-
你正在按顺序从桌子上拿走所有的票。你需要把
... from transaksi where date = @date放在那里。
标签: sql sql-server