টি-এসকিউএল নম্বরগুলিকে ফরম্যাট করতে নম্বর এবং স্ট্রিংগুলি কীভাবে সংঘবদ্ধ করতে হবে?


105

আমি নিম্নলিখিত ফাংশন আছে

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

তবে যখন আমি এটি ব্যবহারের চেষ্টা করেছি, তখন আমি নীচের ত্রুটি পেয়েছি "বর্ণের মান 'x' কে ডেটা টাইপ ইনটে রূপান্তর করার সময় রূপান্তর ব্যর্থ হয়েছে" " যখন আমি নিম্নলিখিত নির্বাচন বিবৃতি ব্যবহার

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

আমি যা করতে চাই তা যদি অ্যাকুয়ালওয়েট শূন্য না হয় তবে "প্রকৃত ওজন / ডিআইএমএস" এর জন্য প্রকৃত ওজনটি ফেরত দিন বা অন্যথায় প্রকৃত_ডিমস_ লেন্থ, প্রস্থ এবং উচ্চতা ব্যবহার করুন।

যদি এটি ডিআইএমএস হয় তবে আমি আউটপুটটিকে LenghtxWidhtxHeight (15x10x4) রূপান্তর করতে চাই। প্রকৃত ওজন, অ্যাডকুটাল_ডিমস_ লেনঘাট, প্রস্থ এবং উচ্চতা সমস্ত অন্তর্ (পূর্ণসংখ্যা) মান তবে "প্রকৃত ওজন / ডিআইএমএস" এর আউটপুটটি বর্ণনাকার (50) হওয়া উচিত।

আমি কোথায় ভুল করছি?

ধন্যবাদ

সম্পাদনা: ব্যবহারকারী কেবলমাত্র এএসপি নেট পৃষ্ঠায় ওজন বা ডিআইএমএস বাছাই করতে পারে এবং ব্যবহারকারী যদি ডিআইএমএস নির্বাচন করেন তবে তাদের অবশ্যই দৈর্ঘ্য, প্রস্থ এবং উচ্চতা সরবরাহ করতে হবে। অন্যথায় এটি এএসপি.net পৃষ্ঠায় ত্রুটি ফেলবে। আমি কি স্কয়ার দিকে এটি নিয়ে চিন্তা করব?

উত্তর:


211

কয়েকটি দ্রুত নোট:

  • এটি "দৈর্ঘ্য" "দৈর্ঘ্য" নয়
  • আপনার ক্যোয়ারীর টেবিলের নামগুলি সম্ভবত এটি আরও অনেক বেশি পাঠযোগ্য

এখন সমস্যা ...

আপনার পরামিতিগুলিকে সুস্পষ্টভাবে VARCHAR এ রূপান্তর করতে হবে সেগুলি বোঝানোর চেষ্টা করার আগে। এসকিউএল সার্ভার যখন @my_int + 'X' দেখেছে তখন মনে হয় আপনি @ x_N_T এ "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))

6
: আপনি সবসময় একটি varchar লেন্থ উচিত sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/...
ইউজিন Ryabtsev

ধন্যবাদ। কিছুটা দেরি হলেও আমি দৈর্ঘ্যের পরামিতিগুলি যুক্ত করেছি।
টম এইচ

53

আপনি ব্যবহার করে থাকেন SQL সার্ভার 2012+ আপনি ব্যবহার করতে পারেন CONCAT ফাংশন যা আমরা কোনো স্পষ্ট রূপান্তর করতে হবে না

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

আমি কিছু দাবি পূরণ করেছি যা এর CONCAT()চেয়ে দ্রুত সম্পাদন করে CAST()। পারফরম্যান্স অধ্যয়নের নির্ভরযোগ্য উত্সগুলি কার্যকর হবে।
হামার

এটি কোনও মানদণ্ডে পরিমাপযোগ্য হলে আমি অবাক হব না, তবে এটি যদি সাধারণ প্রশ্নের ক্ষেত্রে কোনও প্রভাব ফেলে তবে আমি খুব অবাক হব। সাধারণ অপারেটিং সময় ডুবতে আপনার কাছে প্রচুর পরিমাণে কাস্ট থাকতে হবে।
সিলভারব্যাক

8

এই পরিবর্তন:

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 ব্যবহার করা দরকার। এখানে কাস্ট এবং কনভার্ট সম্পর্কে সমস্ত জানুন , কারণ ডেটা ধরণের গুরুত্বপূর্ণ!



4

আপনার পূর্ণসংখ্যার স্ট্রিং হিসাবে ক্যারেক্টেট করার চেষ্টা করার সময় অবশ্যই তাদের অবশ্যই ভার্চারে নিক্ষেপ করতে হবে।

অর্থাত

 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));

এসকিউএল সার্ভার ২০০৮ এ আপনি এই STRফাংশনটি ব্যবহার করতে পারেন :

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

2
ডিফল্টরূপে ফাংশনটি সংখ্যাটি 10 ​​টি অক্ষরে প্যাড করে যাতে এতে স্পেসের প্রচুর পরিমাণ যুক্ত হয়। যেমন STR(1)আমাকে 9 টি স্পেস দেয় তারপরে 1CASTআসলে আরও ভাল কাজ করে।
তাহির হাসান

2

প্রথমে বার্চারে পূর্ণসংখ্যা কাস্ট করুন!


যথাযথভাবে। স্ট্রিং 'এক্স' সম্পূর্ণরূপে অর্থহীন ইন ডিক্সকে হাতুড়ি করে; ইউডিএফ-তে কোনও পাটিগণিত নেই।
বিভিজে

2

স্ট্রিং কনটেনটেশন করার আগে আপনাকে আপনার সংখ্যার তথ্য স্ট্রিংয়ে কাস্ট করতে হবে, উদাহরণস্বরূপ ন্যায়বিচারের CAST(@Actual_Dims_Lenght AS VARCHAR)পরিবর্তে @Actual_Dims_Lenghtএবং সি ব্যবহার করুন।


2

আমাকে নীচের ক্যোয়ারীটি চেষ্টা করা হয়েছিল এটি আমার পক্ষে ঠিক কাজ করে

 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

1

ইনটগুলি স্ট্রিংয়ের সাথে যুক্ত করার আগে, বারচারে কাস্ট করার চেষ্টা করুন:

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))

1

আপনি যখন পূর্ণসংখ্যাকে Str ... তে রুপান্তরিত করেন তখন আপনি বৈজ্ঞানিক নম্বর দিয়ে শেষ করতে পারেন এমন সম্ভাবনা রয়েছে

SET @ActualWeightDIMS = STR(@Actual_Dims_Width); OR Select STR(@Actual_Dims_Width) + str(@Actual_Dims_Width)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.