gpt4 book ai didi

sql - 如何在 T-SQL 中连接数字和字符串以格式化数字?

转载 作者:行者123 更新时间:2023-12-03 04:52:11 24 4
gpt4 key购买 nike

我有以下功能

ALTER FUNCTION [dbo].[ActualWeightDIMS]
(
-- Add the parameters for the function here
@ActualWeight int,
@Actual_Dims_Lenght int,
@Actual_Dims_Width int,
@Actual_Dims_Height int
)
RETURNS varchar(50)
AS
BEGIN

DECLARE @ActualWeightDIMS varchar(50);
--Actual Weight
IF (@ActualWeight is not null)
SET @ActualWeightDIMS = @ActualWeight;
--Actual DIMS
IF (@Actual_Dims_Lenght is not null) AND
(@Actual_Dims_Width is not null) AND (@Actual_Dims_Height is not null)
SET @ActualWeightDIMS= @Actual_Dims_Lenght + 'x' + @Actual_Dims_Width + 'x' + @Actual_Dims_Height;


RETURN(@ActualWeightDIMS);

END

但是当我尝试使用它时,出现以下错误“将 varchar 值“x”转换为数据类型 int 时转换失败。”当我使用以下选择语句时

select 
BA_Adjustment_Detail.ID_Number [ID_Number],
BA_Adjustment_Detail.Submit_Date [Submit_Date],
BA_Category.Category [category],
BA_Type_Of_Request.Request [Type_Of_Request],
dbo.ActualWeightDIMS(BA_Adjustment_Detail.ActualWeight,BA_Adjustment_Detail.Actual_Dims_Lenght,BA_Adjustment_Detail.Actual_Dims_Width,BA_Adjustment_Detail.Actual_Dims_Height) [Actual Weight/DIMS],
BA_Adjustment_Detail.Notes [Notes],
BA_Adjustment_Detail.UPSCustomerNo [UPSNo],
BA_Adjustment_Detail.TrackingNo [AirbillNo],
BA_Adjustment_Detail.StoreNo [StoreNo],
BA_Adjustment_Detail.Download_Date [Download_Date],
BA_Adjustment_Detail.Shipment_Date[ShipmentDate],
BA_Adjustment_Detail.FranchiseNo [FranchiseNo],
BA_Adjustment_Detail.CustomerNo [CustomerNo],
BA_Adjustment_Detail.BillTo [BillTo],
BA_Adjustment_Detail.Adjustment_Amount_Requested [Adjustment_Amount_Requested]
from BA_Adjustment_Detail
inner join BA_Category
on BA_Category.ID = BA_Adjustment_Detail.CategoryID
inner join BA_Type_Of_Request
on BA_Type_Of_Request.ID = BA_Adjustment_Detail.TypeOfRequestID

我想要做的是,如果 ActualWeight 不为空,则返回“实际重量/DIMS”的 ActualWeight,或者使用 Actual_Dims_Lenght、宽度和高度。

如果是 DIMS,那么我想将输出格式设置为 LenghtxWidhtxHeight (15x10x4)。 ActualWeight、Adcutal_Dims_Lenght、Width 和 Height 均为 int(整数)值,但“Actual Weight/DIMS”的输出应为 varchar(50)。

我哪里理解错了?

谢谢

编辑:用户只能在 ASP.net 页面上选择“重量”或“DIMS”,如果用户选择“DIMS”,则必须提供“长度”、“宽度”和“高度”。否则它将在 ASP.net 页面上抛出错误。我应该在sql方面担心它吗?

最佳答案

一些简短的说明:

  • 是“长度”而不是“长度”
  • 查询中的表别名可能会使其更具可读性

现在解决问题...

在尝试连接参数之前,您需要将参数显式转换为 VARCHAR。当 SQL Server 看到 @my_int + 'X' 时,它认为您正在尝试将数字“X”添加到 @my_int,但它无法执行此操作。相反,请尝试:

SET @ActualWeightDIMS =
CAST(@Actual_Dims_Lenght AS VARCHAR(16)) + 'x' +
CAST(@Actual_Dims_Width AS VARCHAR(16)) + 'x' +
CAST(@Actual_Dims_Height AS VARCHAR(16))

关于sql - 如何在 T-SQL 中连接数字和字符串以格式化数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/951320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com