ভেরিয়েবলগুলির সাথে কি স্টার্টস-এর সাথে টি স্কুয়েল থাকে?


94

সার্ভারটি এক্সপ্রেস সংস্করণ চলছে কিনা তা সনাক্ত করার চেষ্টা করছি।

আমার নিচের টি বর্গক্ষেত্র রয়েছে।

DECLARE @edition varchar(50); 
set @edition = cast((select SERVERPROPERTY ('edition')) as varchar)

print @edition

আমার উদাহরণে, @edition = Express Edition (64-bit)

আমি নিম্নলিখিতটি কীভাবে করতে পারি? (সি # অনুপ্রাণিত)।

DECLARE @isExpress bit;
set @isExpress = @edition.StartsWith('Express Edition');

উত্তর:


123

সঙ্গে সঙ্গে শুরু হয়

a) left(@edition, 15) = 'Express Edition'
b) charindex('Express Edition', @edition) = 1

ধারণ করে

charindex('Express Edition', @edition) >= 1

উদাহরণ

left ফাংশন

set @isExpress = case when left(@edition, 15) = 'Express Edition' then 1 else 0 end

iif ফাংশন (এসকিউএল সার্ভার 2012 দিয়ে শুরু)

set @isExpress = iif(left(@edition, 15) = 'Express Edition', 1, 0);

charindex ফাংশন

set @isExpress = iif(charindex('Express Edition', @edition) = 1, 1, 0);

4
নোট করুন যে অভ্যন্তরীণভাবে এগুলি আলাদাভাবে কাজ করে, বিশেষত কব্জি প্রদর্শন এবং সূচকগুলির এর ব্যবহার। উদাহরণস্বরূপ, একটি ক্যোয়ারী ব্যবহার করে colName LIKE 'prefix%'খুব দ্রুত কবে স্বাধীন হবো colNameসূচীবদ্ধ করা হয়, কিন্তু colName LIKE '%substring%'বা colName LIKE '%suffix'কারণ SQL সার্ভার যখন টেক্সট সূচিবদ্ধ প্রত্যয় বাগানের তৈরি করে না ধীর হবে। একইভাবে LEFTএকটি কলামের সাথে ব্যবহার করাও ধীর হবে কারণ এই প্রশ্নগুলি SARGable নয়। এসআরজিএবিলিটি গুরুত্বপূর্ণ: dba.stackexchange.com/Qestions/162263/…
ডাই

আমি নীচে উল্লিখিত লাইক 'x%' পদ্ধতিটি পরীক্ষা করার পরামর্শ দেব। কিছু ক্ষেত্রে এটি আরও দ্রুত
টনি সেপিয়া

72

দেখে মনে হচ্ছে আপনি যা চান তা হ'ল http://msdn.microsoft.com/en-us/library/ms186323.aspx

আপনার উদাহরণে এটি হবে (এর সাথে শুরু):

set @isExpress = (CharIndex('Express Edition', @edition) = 1)

বা থাকে

set @isExpress = (CharIndex('Express Edition', @edition) >= 1)

লাইক ব্যবহার করবেন না কেন Express Edition%? এছাড়াও, আপনার সমাধানটি "এক্সপ্রেস সংস্করণ" এর সত্যিকারের ফেরত আসে না? সুতরাং এটি আরও নির্দিষ্টভাবে এটি করার পদ্ধতিতে কেবল "অন্তর্ভুক্ত" ধরণের
ডোন চ্যাডল

4
@ মিমক্রাই নীচের মত সংস্করণটি ব্যবহার করার সময় এটি ঠিক থাকবে এটি প্রথম উপায় যা মনে এসেছিল এবং ওপিতে যা ছিল তা বেশিরভাগের মতো দেখাচ্ছে। এছাড়াও, প্রথম অভিব্যক্তিটি কেবলমাত্র সত্যটি ফিরে আসবে যদি ভেরিয়েবলটি প্রদত্ত যুক্তি দিয়ে শুরু হয় (Charindex 1 প্রদান করে) argument দ্বিতীয় এক্সপ্রেশনটি একটি অন্তর্ভুক্ত হিসাবে এটি সত্য হিসাবে ফিরে আসবে যদি স্ট্রিংয়ের কোথাও আর্গুমেন্ট পাওয়া যায় (Charindex 1 বা ততোধিকতর ফেরত দেয়)।
গ্যারি.এস

46

আমি ব্যবহার করব

like 'Express Edition%'

উদাহরণ:

DECLARE @edition varchar(50); 
set @edition = cast((select SERVERPROPERTY ('edition')) as varchar)

DECLARE @isExpress bit
if @edition like 'Express Edition%'
    set @isExpress = 1;
else
    set @isExpress = 0;

print @isExpress

আপনি যদি প্রশ্নটি পড়ে থাকেন তবে এটি কোনও জিজ্ঞাসা নয়। আপনার উত্তর দিয়ে আমার উদাহরণ চেষ্টা করুন এবং তারপরে আপনার উত্তরটি এটি কার্যকর করে তা আপডেট করুন।
ভালামাস

আপনি যদি টি-স্কুলে স্টেট-স্টেটমেন্ট ব্যবহার করতে পারেন। এই কারণেই আমি পছন্দ করি। আপনি কেন আমাকে তার জন্য বিয়োগ পয়েন্ট দিতে চান তা দেখছি না তবে কেন দিচ্ছে না।
টমাস কোয়েলে

9
এটি পছন্দসই উপায় হতে হবে; এটি আরও মার্জিত, কম ভার্বোজ এবং "এসকিউএল প্রান্তিককরণ": এটি স্ট্যান্ডার্ড এসকিউএল লাইক অপারেটরটি ব্যবহার করার কারণে, ডকুমেন্টেশনগুলি এটি বোঝার দরকার নেই!
ফের গার্সিয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.