복붙노트

[SQL] 어떻게 T-SQL의 형식 번호에 연결하여 숫자 및 문자열에?

SQL

어떻게 T-SQL의 형식 번호에 연결하여 숫자 및 문자열에?

나는 다음과 같은 기능을 가지고

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

내가 그것을 사용하려고 할 때, 나는 "int 데이터 형식에 VARCHAR 값을 'X'로 변환 할 때 변환에 실패했습니다."다음 오류가 발생했습니다 나는 다음과 같은 SELECT 문을 사용할 때

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"그렇지 않으면 사용 Actual_Dims_Lenght, 너비 및 높이의 ActualWeight을 반환 한 후 널 (null)이 아닙니다.

이 DIMS이면 난 LenghtxWidhtxHeight (15x10x4)로 출력을 포맷 할. ActualWeight, Adcutal_Dims_Lenght, 너비와 높이가 모두 INT (정수) 값 만의 출력 "실제 무게 / DIMS"VARCHAR (50)를해야한다.

어디에서 잘못을 무엇입니까?

감사

편집 : 사용자는 ASP.net 페이지에 무게 또는 DIMS 중 하나를 선택할 수 있으며, 사용자가 선택한 DIMS는 그 때 길이, 너비 및 높이를 제공해야합니다. 그렇지는 ASP.net 페이지에 오류가 발생합니다. 나는 SQL 측에서 걱정해야 하는가?

해결법

  1. ==============================

    1.빠른 노트의 몇 :

    빠른 노트의 몇 :

    이제 문제 위에 ...

    당신은 명시 적으로 연결하는 시도하기 전에 VARCHAR로 매개 변수를 변환해야합니다. SQL 서버가 @my_int + 'X'를 볼 때 당신이 @my_int 할 수 "X"를 추가하려하고 그렇게 할 수 있다고 생각. 대신하려고 :

    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))
    
  2. ==============================

    2.SQL Server를 사용하는 경우 우리가 어떤 명시 적 변환을 할 필요가 없습니다있는 2012+는 CONCAT 기능을 사용할 수 있습니다

    SQL Server를 사용하는 경우 우리가 어떤 명시 적 변환을 할 필요가 없습니다있는 2012+는 CONCAT 기능을 사용할 수 있습니다

    SET @ActualWeightDIMS = Concat(@Actual_Dims_Lenght, 'x', @Actual_Dims_Width, 'x' 
                            , @Actual_Dims_Height) 
    
  3. ==============================

    3.이 변경 :

    이 변경 :

    SET @ActualWeightDIMS= @Actual_Dims_Lenght + 'x' + 
        @Actual_Dims_Width + 'x' + @Actual_Dims_Height;
    

    이에:

    SET @ActualWeightDIMS= CAST(@Actual_Dims_Lenght as varchar(3)) + 'x' + 
        CAST(@Actual_Dims_Width as varchar(3)) + 'x' + 
        CAST(@Actual_Dims_Height as varchar(3));
    

    이 변경 :

    SET @ActualWeightDIMS = @ActualWeight;
    

    이에:

    SET @ActualWeightDIMS = CAST(@ActualWeight as varchar(50));
    

    당신은 CAST를 사용해야합니다. 데이터 유형이 중요하기 때문에, 여기 CAST 및 CONVERT에 대한 모든 알아보기!

  4. ==============================

    4.

    select 'abcd' + ltrim(str(1)) + ltrim(str(2))
    
  5. ==============================

    5.포함 된 VARCHAR로를 연결하는 시도 할 때 당신은 문자열로 정수를 캐스팅해야합니다.

    포함 된 VARCHAR로를 연결하는 시도 할 때 당신은 문자열로 정수를 캐스팅해야합니다.

     SELECT  @ActualWeightDIMS = CAST(@Actual_Dims_Lenght AS varchar(10)) 
                                  + 'x' + 
                                 CAST(@Actual_Dims_Width as varchar(10)) 
                                 + 'x' + CAST(@Actual_Dims_Height as varchar(10));
    

    SQL Server 2008에서는, 당신은 STR 기능을 사용할 수 있습니다 :

       SELECT  @ActualWeightDIMS = STR(@Actual_Dims_Lenght) 
                                  + 'x' + STR(@Actual_Dims_Width) 
                                  + 'x' + STR(@Actual_Dims_Height);
    
  6. ==============================

    6.첫째 VARCHAR에 정수 캐스트!

    첫째 VARCHAR에 정수 캐스트!

  7. ==============================

    7.당신은 당신이 문자열 연결을하기 전에 그래서 예를 사용 CAST (@Actual_Dims_Lenght AS VARCHAR) 대신에 단지 @Actual_Dims_Lenght, & C의 문자열에 숫자 데이터를 캐스팅해야합니다.

    당신은 당신이 문자열 연결을하기 전에 그래서 예를 사용 CAST (@Actual_Dims_Lenght AS VARCHAR) 대신에 단지 @Actual_Dims_Lenght, & C의 문자열에 숫자 데이터를 캐스팅해야합니다.

  8. ==============================

    8.나는 그것이 정확히 나를 위해 작품의 쿼리 아래 시도했다

    나는 그것이 정확히 나를 위해 작품의 쿼리 아래 시도했다

     with cte as(
    
       select ROW_NUMBER() over (order by repairid) as'RN', [RepairProductId] from [Ws_RepairList]
      )
      update CTE set [RepairProductId]= ISNULL([RepairProductId]+convert(nvarchar(10),RN),0) from cte
    
  9. ==============================

    9.문자열에 추가하기 전에, VARCHAR로의 int를 주조하십시오 :

    문자열에 추가하기 전에, VARCHAR로의 int를 주조하십시오 :

    SET @ActualWeightDIMS = cast(@Actual_Dims_Lenght as varchar(8)) + 
       'x' + cast(@Actual_Dims_Width as varchar(8)) + 
       'x' + cast(@Actual_Dims_Height as varhcar(8))
    
  10. ==============================

    10.당신이 str을 정수로 변환 할 때 과학 번호로 끝날 수 있다는 가능성이 있습니다 ... 안전한 방법입니다

    당신이 str을 정수로 변환 할 때 과학 번호로 끝날 수 있다는 가능성이 있습니다 ... 안전한 방법입니다

    SET @ActualWeightDIMS = STR (@Actual_Dims_Width); 또는 선택 STR (@Actual_Dims_Width) + STR (@Actual_Dims_Width)

  11. from https://stackoverflow.com/questions/951320/how-to-concatenate-numbers-and-strings-to-format-numbers-in-t-sql by cc-by-sa and MIT license