এসকিউএল সার্ভার ২০০৮ আর 2 এ আমি কনক্যাট ফাংশনটি কীভাবে ব্যবহার করব?


102

আমি CONCATএসকিউএল সার্ভার ২০০৮ আর 2 এ একটি ফাংশন খুঁজছিলাম । আমি এই ফাংশনটির জন্য লিঙ্কটি পেয়েছি । তবে যখন আমি এই ফাংশনটি ব্যবহার করি, এটি নিম্নলিখিত ত্রুটিটি দেয়:

এমএসজি 195, স্তর 15, রাজ্য 10, লাইন 7
'কনক্যাট' কোনও স্বীকৃত অন্তর্নির্মিত ফাংশনটির নাম নয়।

CONCATএসকিউএল সার্ভার ২০০৮ আর 2 এ ফাংশনটি বিদ্যমান?

যদি তা না হয় তবে আমি কীভাবে এসকিউএল সার্ভার 2008 আর 2 তে স্ট্রিংগুলি সংযুক্ত করতে পারি?


@ ওডে আমি কেবল স্টেমটি কার্যকর করার চেষ্টা করলাম - কনক্যাট ("বি", 'এ') নির্বাচন করুন
মিতেশ বুধাবতী

1
@marc_s: ডকুমেন্টেশন কিছু ইঙ্গিত এটি SQL সার্ভার 2012 জন্য আছে, কিন্তু সেখানে কোন ইঙ্গিত যে CONCATহয় নতুন 2012 জন্য
গেব

1
এটি অপ্রত্যক্ষভাবে ইঙ্গিত করে যে এটি ২০১২ এর জন্য, তবে পৃষ্ঠাটি ইউআই ডিজাইনের দুর্বল। যে পৃষ্ঠাগুলিতে পুরানো সংস্করণগুলিতে কোনও ফাংশন পাওয়া যায় সেখানে আপনি যে ডকটিটি পড়ছেন তার সংস্করণের ঠিক পাশেই একটি ড্রপ ডাউন রয়েছে। যদি আপনি এটি জানেন তবে আপনি জানেন যে এটি কেবল ২০১২ এর জন্য। যদি আপনি এটি না জানতেন তবে আপনি মিতেশের মতো একই পরিস্থিতিতে শেষ করবেন।
জন

উত্তর:


70

CONCATএটি একটি ফাংশন নয় SQL সার্ভার 2012 কাছে নতুন, লিঙ্ক আপনার দেওয়া এই সুস্পষ্ট পূর্ববর্তী সংস্করণ 2008 R2 হলো সহ।

এটি যে এসকিউএল সার্ভার ২০১২ এর অংশ তা নথির ট্রিতে দেখা যাবে:

SQL Server 2012  
Product Documentation  
Books Online for SQL Server 2012  
Database Engine  
  Transact-SQL Reference (Database Engine)  
    Built-in Functions (Transact-SQL)  
      String Functions (Transact-SQL)  

এডিআইটি মার্টিন স্মিথ সহায়কভাবে উল্লেখ করেছেন যে এসকিউএল সার্ভার ওডিবিসির CONCATকার্যকারিতা সরবরাহ করে


26
আপনি SELECT {fn concat ('foo', 'bar')};পূর্ববর্তী সংস্করণগুলিতে ব্যবহার করতে পারেন । যদিও কেবল 2 প্যারামিটার গ্রহণ করে।
মার্টিন স্মিথ

6
অথবা কেবল +অপারেটরটি ব্যবহার করুন , যেমন @ লিন-ল্যাংটি তার উত্তরে উল্লেখ করেছে, যা আমি প্রথমে পুরোপুরি মিস করেছি কারণ আমি কেবল স্বীকৃত উত্তরটি পড়েছি ...
সুইভিশ

7
@Svish +আচরণ করবে ভিন্নভাবে, এর ফলাফল SELECT 'A' + 'B' + 'C'বনাম SELECT CONCAT('A', 'B', 'C')বনাম SELECT 'A' + 'B' + NULLবনাম SELECT CONCAT('A', 'B', NULL)হয় ABC, ABC, NULL,AB
ta.speot.is

@ ta.speot.is জেনে রাখা ভাল! যদিও আমার ক্ষেত্রে কোনও মামলা ছিল না NULL, তাই +দুর্দান্ত কাজ করেছে :)
সুইভিশ

আপনি যদি প্লাস-সাইন পরিবর্তে ব্যবহার করতে চান এমন তথ্য থাকে তবে এই উত্তরটি আরও বেশি কার্যকর হবে useful সম্প্রদায়টি এই মতামতটি নিশ্চিত করেছে - @ লিনল্যাঙ্গিতের উত্তরের তুলনা করুন :) ওপি আরও জিজ্ঞাসা করেছে "এসকিউএল সার্ভার ২০০৮ আর 2-তে আমি কীভাবে স্ট্রিংগুলি সংযুক্ত করতে পারি?"
হুনজা জিদেক

101

কেবল সম্পূর্ণতার জন্য - এসকিউএল ২০০৮ এ আপনি +স্ট্রিং কনটেনটেশন সম্পাদন করতে প্লাস অপারেটরটি ব্যবহার করবেন ।

নমুনা কোড সহ এমএসডিএন রেফারেন্সটি একবার দেখুন । এসকিউএল 2012 দিয়ে শুরু করে আপনি নতুন কনক্যাট ফাংশনটি ব্যবহার করতে চাইতে পারেন ।


46

আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি সমস্ত কলামগুলি একত্র করার আগে তারা কাস্ট করেছেন

cast('data1' as varchar) + cast('data2' as varchar) + cast('data3' as varchar)

এটি আপনার পক্ষে কাজ করা উচিত।


6
টিআইপি: এটি উল্লেখযোগ্য যে ভার্চারের আকারটি নির্দিষ্ট না করে যেমন ভার্চর (50), বর্গক্ষেত্রটি 30 এর ডিফল্ট ব্যবহার করবে the
সুইফটি

23

কনক্যাট, যেমনটি বলা হয়েছে, এসকিউএল সার্ভার ২০১২ এর পূর্বে সমর্থিত নয় However তবে আপনি কেবলমাত্র প্রস্তাবিত হিসাবে + অপারেটরটি ব্যবহার করে সম্মতি জানাতে পারেন। তবে সাবধান, এই অপারেটরটি একটি ত্রুটি ছুঁড়ে দেবে যদি প্রথম অপারেন্ডটি এমন একটি সংখ্যা হয় যেহেতু এটি মনে করে যে যুক্ত করা হবে এবং যুক্ত হবে না। এই সমস্যাটি সমাধান করার জন্য সামনে '' যোগ করুন। উদাহরণ স্বরূপ

someNumber + 'someString' + .... + lastVariableToConcatenate

একটি ত্রুটি বাড়িয়ে দেবে কিন্তু '' + someNumber + 'someString' + ......ঠিক কাজ করবে কিন্তু ।

এছাড়াও, যদি দুটি সংখ্যা সংশ্লেষিত হয় তবে নিশ্চিত হয়ে নিন যে আপনি তাদের মধ্যে একটি '' যুক্ত করেছেন, যেমন

.... + someNumber + '' + someOtherNumber + .....

ধন্যবাদ, কলাম তালিকার মধ্যে '' + f.columnName + '' ব্যবহার করা ট্রিট কাজ করে!
লুক

2
@ কুকলেই আমার এসকিউএল সার্ভারে SELECT 'varchar(' + 5 + ')'ত্রুটিটি ছুঁড়ে দিয়েছে "এনভারচারার মান 'বার্চারে রূপান্তর করার সময় রূপান্তর ব্যর্থ হয়েছে (' ডেটা টাইপ ইন্টিতে '", তাই আমি অনুমান করি যে আপনার উত্তরটি ধরে নেই
আলেকজান্ডার

5

এসকিউএল সার্ভার 2012 কনক্যাট ফাংশনের জন্য প্রতিস্থাপনের আনুমানিকগুলিতে নুল নিরাপদ ড্রপ

এসকিউএল সার্ভার 2012 :

SELECT CONCAT(data1, data2)

প্রি এসকিউএল 2012 (দুটি সমাধান) :

SELECT {fn CONCAT(ISNULL(data1, ''), ISNULL(data2, ''))}

SELECT ISNULL(CAST(data1 AS varchar(MAX)), '') + ISNULL(CAST(data2 AS varchar(MAX)), '')

এই দুটি সমাধান @ মার্টিন স্মিথ, @ স্যুইশ এবং @ ভাসিন ১৯87 including সহ অন্যান্য পোস্টারদের দ্বারা উত্থাপিত বেশ কয়েকটি দুর্দান্ত উত্তর এবং সতর্কতা সংগ্রহ করে।

এই অপশন যোগ NULLকরার জন্য ''(খালি STRING) নিরাপদ জন্য ভোটদান NULLহ্যান্ডলিং যখন নানারকম আচরণের জন্য অ্যাকাউন্টিং +অপারেটর নির্দিষ্ট operands সংক্রান্ত।

নোট করুন ওডিবিসি স্কেলারের ফাংশন সমাধানটি 2 টি আর্গুমেন্টের মধ্যে সীমাবদ্ধ যেখানে +অপারেটর পদ্ধতির প্রয়োজন অনুসারে অনেকগুলি আর্গুমেন্টে স্কেলযোগ্য।

varcharএখানে প্রতিকারের মাধ্যমে ডিফল্ট আকারের বিষয়ে @ সুইফটি দ্বারা চিহ্নিত সম্ভাব্য সমস্যাটিও নোট করুন varchar(MAX)


3
(city + ', ' + state + ' ' + zip) as ctstzip for select
(city + ', ' + state + ' ' + zip) for insert

যদি কোনও ক্ষেত্রের ধরন অন্যের থেকে আলাদা হয় তবে কেবল কাস্ট বা রূপান্তর করুন convert

সন্নিবেশ করার সময় মানটি সঠিক স্থানে থাকা দরকার যা এটি সন্নিবেশ করা দরকার। "হিসাবে" ব্যবহার করা আপনাকে ত্রুটি দেয়।

অর্থাত

Insert into testtable (ctstzip) Values ((city + ', ' + state + ' ' + zip))

2

হ্যাঁ ফাংশনটি ২০০৮-এ স্কয়ারে নেই You এটি করতে আপনি কাস্ট অপারেশনটি ব্যবহার করতে পারেন।

উদাহরণস্বরূপ আমরা আছে employeeটেবিল এবং যদি আপনি চান nameসঙ্গে applydate

যাতে আপনি ব্যবহার করতে পারেন

Select   cast(name as varchar) + cast(applydate as varchar) from employee

এটি কাজ করবে যেখানে কনক্যাট ফাংশন কাজ করছে না।

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