在返回的查询结果前填充0,并插入临时表中。

14 浏览
0 Comments

在返回的查询结果前填充0,并插入临时表中。

Formatting Numbers by padding with leading zeros in SQL Server得到了用于在SQL Server中填充0的sql代码。

我想要的是从我们的Navigator数据库表中获取用户的订单历史记录。我们有一个流程,将网站表中的订单放入Navigator表中(因为订单需要格式化为nav表)。我想要查询网站表,通过用户ID获取已登录用户的订单:

SELECT OrderID FROM db1.zm.dbo.zOrder WHERE AccountID = 631180(这将返回多个订单ID)

db1是服务器,zm是数据库。

返回的OrderID格式如45655675等。我想要将它们插入一个临时表中,例如:Z0004565,其中包含一个Z和足够的前导0,使数字达到7位数。

如何修改select语句来实现这个目标?还是说我可以这样做?

填充0的SQL代码:SELECT REPLICATE('0', 7-LEN(4665)) + 4665

根据评论的SQL代码:

DECLARE @OrderNumTable table (orderNum  varchar(20))
INSERT INTO @OrderNumTable EXEC( SELECT (''Z'' + REPLICATE(''0'', 7-len(OrderID)) + OrderID)FROM db1.zm.dbo.zOrder WHERE AccountID = 631180

0
0 Comments

问题的原因是,当尝试将字符串 'Z000' 转换为 int 类型时,发生了转换失败的错误。这是因为订单号是一个 int 类型的值,而 'Z000' 是一个字符串。解决方法是将最后一个加数转换为字符串类型。

可以通过在字符串 'Z' 前面添加一个 'Z' 来解决这个问题吗?

SELECT 'Z' + REPLICATE('0', 7-LEN(OrderID)) + LTRIM(STR(OrderID))

这种方法在订单号是数值类型时会失败。因此,我们需要将最后一个加数转换为字符串类型。

我在尝试这样做时遇到了这个错误:Conversion failed when converting the varchar value 'Z000' to data type int. 我猜这是因为订单号是 int 类型的值,但是我不知道该怎么处理,因为我不能改变它。

请看我的更新的答案 - 需要将最后一个加数转换为字符串类型。

0
0 Comments

问题出现的原因是需要将查询结果中的OrderID前面补0,并插入到临时表中。解决方法是使用RIGHT函数将OrderID转换为字符串,然后使用字符串连接和补零的方式来生成新的订单编号。具体步骤如下:

1. 在原有的查询语句中,使用RIGHT函数获取OrderID的后7位,并将其转换为字符串。

2. 使用字符串连接将"Z"和补零后的OrderID拼接在一起,生成新的订单编号。

3. 将生成的新订单编号插入到临时表中。

以下是具体的代码实现:

-- 查询语句中补0并插入临时表
SELECT  OrderID,
        'Z'+RIGHT('0000000'+CAST(OrderID AS VARCHAR(7)),7)
INTO #TempTable
FROM db1.zm.dbo.zOrder 
WHERE AccountID = 631180
-- 声明临时表
DECLARE @TempTable TABLE (orderNum  varchar(8))
-- 将查询结果插入到临时表中
INSERT INTO @TempTable (orderNum)
SELECT 'Z'+RIGHT('0000000'+CAST(OrderID AS VARCHAR(7)),7)
FROM db1.zm.dbo.zOrder 
WHERE AccountID = 631180

以上代码将查询结果中的OrderID前面补0,并插入到临时表中。临时表的结构为一个列orderNum,用于存储补0后的新订单编号。

0