SQL数据库编程题有人会吗?有大佬可以教教我,编程大佬看看我!?
1个回答
关注
展开全部
以下是生成新订单号并打印的 SQL 语句:DECLARE @newOrderNo VARCHAR(20);DECLARE @maxOrderNo VARCHAR(20);DECLARE @orderDate VARCHAR(8) = CONVERT(VARCHAR(8), GETDATE(), 112);-- 判断当天是否有订单IF EXISTS (SELECT 1 FROM Orderinfo WHERE OrderNo LIKE 'DD' + @orderDate + '%')BEGIN -- 当天有订单,生成新的订单号 SELECT @maxOrderNo = MAX(OrderNo) FROM Orderinfo WHERE OrderNo LIKE 'DD' + @orderDate + '%'; SET @newOrderNo = 'DD' + @orderDate + RIGHT('000' + CAST(RIGHT(@maxOrderNo, 4) + 1 AS VARCHAR(4)), 4);ENDELSEBEGIN -- 当天没有订单,生成新的订单号 SET @newOrderNo = 'DD' + @orderDate + '0001';END-- 打印新的订单号SELECT @newOrderNo;
咨询记录 · 回答于2023-04-20
SQL数据库编程题有人会吗?有大佬可以教教我,编程大佬看看我!?
你好,具体的SQL数据库编程题呢
你好,我看不清,你可以直接复制给我就行了
建立数据表Orderinfo并插入如下数据:其中,OrderNo列的值由DD+日期(格式为YYYYMMDD)+序号(000N)构成.使用T-SQL编程实现如下需求:生成新的订单号并打印,生成规则:当天如果没有订单,则生成的订单号为DD+日期(格式为YYYYMMDD)+0001,如果当天已经有了订单,则生成的订单号为DD+日期(格式为YYYYMMDD)+最大订单的尾号加1。如2022年3月16日的下一笔订单为DD202203160105如2022年3月17日的下一笔订单为DD202203170005思路:查询当天是否用订单,若有找出最近一笔订单,将此笔订单数值+1,拼接生成新的订单号。若没有,则直接按规则生成新的订单。
以下是创建表和插入数据的 SQL 语句:CREATE TABLE Orderinfo ( OrderNo VARCHAR(20) PRIMARY KEY, OrderDate DATE NOT NULL, CustomerName VARCHAR(50) NOT NULL, Amount DECIMAL(10, 2) NOT NULL);INSERT INTO Orderinfo(OrderNo, OrderDate, CustomerName, Amount)VALUES ('DD202204200001', '2022-04-20', 'CustomerA', 100.00), ('DD202204200002', '2022-04-20', 'CustomerB', 200.00), ('DD202204200003', '2022-04-20', 'CustomerC', 300.00), ('DD202204200004', '2022-04-20', 'CustomerD', 400.00);
以下是生成新订单号并打印的 SQL 语句:DECLARE @newOrderNo VARCHAR(20);DECLARE @maxOrderNo VARCHAR(20);DECLARE @orderDate VARCHAR(8) = CONVERT(VARCHAR(8), GETDATE(), 112);-- 判断当天是否有订单IF EXISTS (SELECT 1 FROM Orderinfo WHERE OrderNo LIKE 'DD' + @orderDate + '%')BEGIN -- 当天有订单,生成新的订单号 SELECT @maxOrderNo = MAX(OrderNo) FROM Orderinfo WHERE OrderNo LIKE 'DD' + @orderDate + '%'; SET @newOrderNo = 'DD' + @orderDate + RIGHT('000' + CAST(RIGHT(@maxOrderNo, 4) + 1 AS VARCHAR(4)), 4);ENDELSEBEGIN -- 当天没有订单,生成新的订单号 SET @newOrderNo = 'DD' + @orderDate + '0001';END-- 打印新的订单号SELECT @newOrderNo;
上述 SQL 语句首先判断当天是否有订单,如果有,则找出当天最新的订单号,然后将其尾号加 1 后作为新的订单号;如果没有,则直接将尾号设为 0001 作为新的订单号。最后打印出新的订单号。
可是题目表里面都只有俩列
如果表中只有两列,那么你可以在表中新增一列来存储订单号,然后再按照上面的思路来实现需求。具体操作如下:在Orderinfo表中新增一列OrderNo,用于存储订单号。ALTER TABLE Orderinfo ADD OrderNo VARCHAR(20);编写存储过程GenerateOrderNo,用于生成订单号并将其插入到Orderinfo表中。CREATE PROCEDURE GenerateOrderNoASBEGINDECLARE @MaxOrderNo VARCHAR(20);DECLARE @NewOrderNo VARCHAR(20);DECLARE @Prefix VARCHAR(2) = 'DD';DECLARE @Date VARCHAR(8) = CONVERT(VARCHAR(8), GETDATE(), 112);DECLARE @SeqNo INT;lessCopy codeSELECT @MaxOrderNo = MAX(OrderNo) FROM Orderinfo WHERE OrderNo LIKE @Prefix + @Date + '%';IF @MaxOrderNo IS NULL SET @SeqNo = 1;ELSE SET @SeqNo = CAST(RIGHT(@MaxOrderNo, 4) AS INT) + 1;SET @NewOrderNo = @Prefix + @Date + RIGHT('000' + CAST(@SeqNo AS VARCHAR(4)), 4);INSERT INTO Orderinfo (OrderNo, OrderName, OrderDate, OrderAmount)VALUES (@NewOrderNo, 'New Order', GETDATE(), 100);SELECT @NewOrderNo AS NewOrderNo;END;执行存储过程GenerateOrderNo,将生成的订单号插入到Orderinfo表中。EXEC GenerateOrderNo;以上就是在表中新增一列后,按照题目要求生成订单号并插入到表中的具体操作步骤。
如图所示:orderno ordernamedd202203160001 测试订单1dd202203170004 测试订单2
这样的表
可以使用如下的T-SQL代码来实现生成新的订单号并打印的需求:-- 查询当天是否有订单DECLARE @today DATE = GETDATE();DECLARE @max_order_no VARCHAR(20);SELECT @max_order_no = MAX(OrderNo) FROM Orderinfo WHERE OrderNo LIKE 'DD' + CONVERT(VARCHAR(8), @today, 112) + '%';-- 生成新的订单号DECLARE @new_order_no VARCHAR(20);IF @max_order_no IS NULLBEGIN SET @new_order_no = 'DD' + CONVERT(VARCHAR(8), @today, 112) + '0001';ENDELSEBEGIN DECLARE @last_num INT = CONVERT(INT, RIGHT(@max_order_no, 4)); SET @new_order_no = 'DD' + CONVERT(VARCHAR(8), @today, 112) + RIGHT('000' + CONVERT(VARCHAR(4), @last_num + 1), 4);END-- 打印新的订单号PRINT @new_order_no;
该代码首先查询当天是否有订单,如果有则找出最近一笔订单的订单号,如果没有则将新的订单号设置为当天日期加上0001。然后根据最大订单号的尾号加1生成新的订单号,最后通过PRINT语句打印新的订单号。