[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.빠른 노트의 몇 :
빠른 노트의 몇 :
이제 문제 위에 ...
당신은 명시 적으로 연결하는 시도하기 전에 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.SQL Server를 사용하는 경우 우리가 어떤 명시 적 변환을 할 필요가 없습니다있는 2012+는 CONCAT 기능을 사용할 수 있습니다
SQL Server를 사용하는 경우 우리가 어떤 명시 적 변환을 할 필요가 없습니다있는 2012+는 CONCAT 기능을 사용할 수 있습니다
SET @ActualWeightDIMS = Concat(@Actual_Dims_Lenght, 'x', @Actual_Dims_Width, 'x' , @Actual_Dims_Height)
-
==============================
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.
select 'abcd' + ltrim(str(1)) + ltrim(str(2))
-
==============================
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.첫째 VARCHAR에 정수 캐스트!
첫째 VARCHAR에 정수 캐스트!
-
==============================
7.당신은 당신이 문자열 연결을하기 전에 그래서 예를 사용 CAST (@Actual_Dims_Lenght AS VARCHAR) 대신에 단지 @Actual_Dims_Lenght, & C의 문자열에 숫자 데이터를 캐스팅해야합니다.
당신은 당신이 문자열 연결을하기 전에 그래서 예를 사용 CAST (@Actual_Dims_Lenght AS VARCHAR) 대신에 단지 @Actual_Dims_Lenght, & C의 문자열에 숫자 데이터를 캐스팅해야합니다.
-
==============================
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.문자열에 추가하기 전에, 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.당신이 str을 정수로 변환 할 때 과학 번호로 끝날 수 있다는 가능성이 있습니다 ... 안전한 방법입니다
당신이 str을 정수로 변환 할 때 과학 번호로 끝날 수 있다는 가능성이 있습니다 ... 안전한 방법입니다
SET @ActualWeightDIMS = STR (@Actual_Dims_Width); 또는 선택 STR (@Actual_Dims_Width) + STR (@Actual_Dims_Width)
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
'SQL' 카테고리의 다른 글
[SQL] 오라클에서 OVER 절 (0) | 2020.05.10 |
---|---|
[SQL] 별명을 가지고 있어야에서 하위 쿼리 (0) | 2020.05.10 |
[SQL] 임시 쿼리 동적 SQL [폐쇄] VS 프로 시저 VS (0) | 2020.05.10 |
[SQL] 모델 고객에게 가장 좋은 방법 <-> 주소 (0) | 2020.05.10 |
[SQL] SQL의 다른 컬럼의 각 값에 대해 가장 일반적인 값을 가져옵니다 (0) | 2020.05.10 |