নিম্নলিখিত ক্রমটি 1,2,3,6,10,10 এ, 10 বি, 11 অনুসারে নিম্নোক্ত স্ট্রিংগুলি সাজানোর জন্য কি কোনও জোট রয়েছে?


12

আমার কাছে একটি ভিআচআরএআর কলাম সহ একটি ডাটাবেস রয়েছে যা বিভিন্ন দৈর্ঘ্যের পূর্ণসংখ্যার সমন্বয় করে। আমি তাদের বাছাই করতে চাই তাই 10 আসে 9 এর পরে, 1 নয়, 70A 70 এর পরে আসে I আমি প্যাটিনডেক্স () , একটি সিটিই, এবং WHEE ধারাটিতে CASE বিবৃতি দিয়ে এটি করতে সক্ষম হয়েছি

যাইহোক, আমি ভাবছিলাম যে এমন কোনও কোলিশেশন রয়েছে যেখানে এটি অকার্যকর হবে।


মাইক্রোসফ্ট সংযোগ থেকে ইউজারওয়াইসে স্থানান্তরিত হয়ে এখনও ইউআরআইগুলিকে
সলোমন রুটজকি

2
মাইক্রোসফ্ট জানিয়েছে যে তারা যথেষ্ট ভোট পেলে এসকিউএল সার্ভারে বিল্ট-ইন ফিচার হিসাবে এটি প্রয়োগ করবে। সুতরাং এখানে যান এবং ভোট বোতামে ক্লিক করুন
পিটার আয়লেট

উত্তর:


8

কোড নম্বর, অ্যাকসেন্ট, কেস, প্রস্থ, কানা উপর নির্ভর করে কোলেশন বর্ণানুক্রমিক বাছাই সম্পর্কে। সংখ্যা অক্ষরের (0-9) এর কোনও বৈশিষ্ট্য নেই।

তাই 9সর্বদা যে কোনও ধরণের পরে 10Bহয় ।

আপনি যেমন নোট করেছেন বা এটি সাজিয়েছেন সেভাবে আপনাকে এটিকে বিভক্ত করতে হবে :

ORDER BY
    RIGHT('                              ' + MyColumn, 30)

ডানদিকে দৈর্ঘ্য নির্ধারণ করে যে আপনার কতগুলি স্থান রয়েছে।

আপনি অবশ্যই করতে পারেন:

  • এটি অপ্রয়োজনীয় (এবং আরও দ্রুত) তৈরি করতে 2 টি কলাম রয়েছে এবং তাদের একত্র করার জন্য একটি গণিত কলাম রয়েছে
  • নেতৃস্থানীয় জিরোদের উপর জোর দিন
  • একটি চরে ডান ন্যায়সঙ্গত করুন (উপরে আমার অধিকারের একটি সঞ্চিত সংস্করণ)

পরবর্তী 2 টি পরামর্শ আমার উপরের অধিকারের মতো এবং কিছুটা আলাদা। দ্রুত সাজানোর জন্য (কলুকম্যানের কোনও প্রক্রিয়াজাতকরণের প্রয়োজন নেই) তবে আরও স্টোরেজ প্রয়োজন


আমি দেখতে পাচ্ছি না এটি কীভাবে কাজ করে। এটি 2, 2 এ, 3, ইত্যাদির জন্য বিরতি দেয় ...
ম্লাদেন প্রজাদিক

@ ম্লাদেন প্রজাদিক: আপনি ঠিক আছেন, উফ! পেছনের বর্ণমালা সম্পর্কে ভুলে গেছেন
17'7 এ gbn

সংক্রান্ত " সুতরাং 9পর সর্বদা 10Bকোন ধরণের হবে। ": এটি শুধুমাত্র যে SQL সার্ভার উপায় কারণ হাতল "DigitsAsNumbers" করার অন্তর্নিহিত সাজানোর বিকল্প একটি কোলেশন বিকল্প হিসাবে উদ্ভাসিত করা হয়েছে হয়। এখনো ;-). এটি উইন্ডোজ 7 এ শুরু হওয়া উইন্ডোজ ভিত্তিক অ্যাপ্লিকেশনগুলিতে উপলব্ধ হয়ে উঠেছে, বিশেষত ফাইল এক্সপ্লোরারে। এবং এটি একদিন এসকিউএল সার্ভারের কাছে প্রকাশ করা যেতে পারে, যদি পর্যাপ্ত লোকেরা ধারণাটি সমর্থন করে। আমি নিম্নলিখিত সংযোগের পরামর্শ ফাইল করে বলটি ঘূর্ণায়মান হওয়ার চেষ্টা করেছি: "প্রাকৃতিক বাছাই করা" / ডিআইজিআইটিএসএএসবিএসকে কোলেশন বিকল্প হিসাবে সমর্থন করুন ।
সলোমন রুটজকি

8

আমি একটি গণিত কলাম সেটআপ করব তার উপর ভিত্তি করে সাজান। কিছুটা এইরকম

CAST( 
     CASE WHEN IS_NUMERIC(left(OtherColumn, 2) = 1) then 
         left(OtherColumn,2) 
     else 
         left(otherColumn, 1)  
AS INT)

তারপরে এই কলামটি সাজানোর জন্য ব্যবহার করুন আপনি এখন কলামটি সূচী করতে পারেন।


অনুরূপ সমস্যার জন্য জানতে এটি সত্যই দরকারী useful তবে এক্ষেত্রে আমি স্কিমা পরিবর্তন করতে পারি না।
জাস্টিন প্রিয়

আপনি স্কিমা যোগ করতে পারেন? একটি গণিত কলাম ব্যতীত, আপনি সর্বদা একটি দর্শন তৈরি করতে পারতেন - তবে এটি কোনও গণিত কলামের মতোই সত্যই অনুকূল হতে পারে না।
অ্যারন বার্ট্র্যান্ড

আপনি যদি কোনও সূচকযুক্ত ভিউ করেন এবং এন্টারপ্রাইজ সংস্করণ থাকলে আপনার ক্যোয়ারী সূচী দর্শনটি স্বয়ংক্রিয়ভাবে ব্যবহার করবে যদি এটি আপনি কী করতে চেষ্টা করছেন তা নির্ধারণ করতে পারে। যদি মানক সংস্করণটি ব্যবহার করতে হয় তবে আপনাকে সূচী দর্শনটি ব্যবহার করতে ট্রিগার করতে WITH (NOEXPAND) ব্যবহার করতে হবে। এই মুহুর্তে আপনার নিজের অর্ডারে কেস স্টেটমেন্ট থাকা দরকার তবে এটি কাজ করা উচিত বলে আমি মনে করি।
mrdenny

আপনার একটি গণিত কলাম তৈরি করার দরকার নেই। আপনি এই অভিব্যক্তিটি সরাসরি অর্ডার বাই ক্লজে ব্যবহার করতে পারেন
a_horse_with_no_name

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

5

আপনি যদি @ জিবিএন কী বলছেন তা প্রমাণ করার জন্য বেদনাদায়ক উপায়টি চান (মূলত আপনি কোনও কোলেশনকে সাবস্ট্রিংগুলি আলাদাভাবে অর্ডার করতে বলতে পারেন না), আপনি একটি দ্রুত # টেম্প টেবিল তৈরি করতে পারেন যা আপনার প্রত্যাশিত ক্রমটির সহগ রয়েছে, এবং দেখুন কিনা যে কোনও কোলেশন দ্বারা অর্ডার করা একই আদেশটি প্রদান করে:

CREATE TABLE #foo(id INT, n NVARCHAR(10));

CREATE TABLE #bar(collation SYSNAME);

SET NOCOUNT ON;

INSERT #foo SELECT 1,'1'
UNION SELECT 2,'2'
UNION SELECT 3,'3'
UNION SELECT 4,'6'
UNION SELECT 5,'10'
UNION SELECT 6,'10A'
UNION SELECT 7,'10B'
UNION SELECT 8,'11';

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'
    WITH x AS 
    (
        SELECT n, rn = ROW_NUMBER() OVER 
        (ORDER BY n COLLATE ' + name + ') FROM #foo
    ) 
    INSERT #bar 
    SELECT TOP (1) ''' + name + ''' FROM x
    WHERE NOT EXISTS
    (
        SELECT COUNT(*) FROM #foo AS f
        WHERE f.id = x.rn
        AND f.n <> x.n
    );' FROM sys.fn_helpcollations();

EXEC sp_executesql @sql;

SELECT collation FROM #bar;

GO
DROP TABLE #foo, #bar;

এটি আমার জন্য প্রায় 10 সেকেন্ডে চলে এবং 0 টি সারি দেয় - যার অর্থ এসকিউএল সার্ভারে কোনও কোল্যাশন উপলব্ধ নয় (কমপক্ষে ২০০৮ আর 2, ডেনালির চেষ্টা করেনি) আপনার প্রত্যাশা অনুযায়ী সাজবে। বাছাইয়ের সংজ্ঞা দেওয়ার জন্য আপনার আলাদা উপায় দরকার।


2

প্রকৃত সংখ্যা হিসাবে স্ট্রিংয়ে সংখ্যা বাছাই করার একটি বুদ্ধিমান, দক্ষ উপায় চান? আমার মাইক্রোসফ্ট সংযোগের পরামর্শের জন্য ভোটদান বিবেচনা করুন: "প্রাকৃতিক বাছাই করা" / ডিআইজিআইটিএসএএসবিএসকে একটি কোলেশন বিকল্প হিসাবে সমর্থন করুন


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

বলা হচ্ছে, এসকিউএল সার্ভারের বাইরে নির্দিষ্ট পরিবেশে এই ধরণের বাছাই করা সম্ভব। এটি এমন কিছু যা ইউনিকোড ডকুমেন্টেশনে অন্তত নির্দিষ্ট করা আছে। ইন ইউনিকোড LOCALE এর ডেটা মার্কআপ ল্যাঙ্গুয়েজ (LDML) অংশ 5: কোলেশন মান / রিপোর্ট, সেখানে একটি চার্ট কোলেশন সেটিংস যে বাছাই আচরণ সেলাই জন্য বিভিন্ন অপশন বর্ণনা করা হয়েছে। বিকল্প এক -kn-trueবা [numericOrdering on]:

যদি সেট করা থাকে , দশমিক অঙ্কের যে কোনও অনুক্রম ([ UAX44 ] এ সাধারণ_ শ্রেণি = এনডি ) এর সংখ্যার মান সহ প্রাথমিক স্তরে বাছাই করা হয়। উদাহরণস্বরূপ, "A-21" <"A-123"। অঙ্কিত প্রাথমিক ওজনগুলি সমস্তই অঙ্কের পুনর্বিন্যাস গোষ্ঠীর শুরুতে । এইভাবে একটি অবহেলিত ইউসিএ টেবিল সহ "a <" <"a0" <"a2" <"a12" <"a⓪" <"আ"।

যাইহোক, এই দস্তাবেজটি "প্রযুক্তিগত মান" এবং মূল ইউনিকোড নির্দিষ্টকরণের অংশ নয়। নথির শীর্ষে একটি নোটে বলা হয়েছে:

একটি ইউনিকোড টেকনিক্যাল স্ট্যান্ডার্ড (ইউটিএস) একটি স্বতন্ত্র স্পেসিফিকেশন। ইউনিকোড স্ট্যান্ডার্ডের সাথে সংগতিপূর্ণ হওয়া কোনও ইউটিএসের সাথে সংগতিপূর্ণ বোঝায় না।

অতএব, এই নির্দিষ্ট আচরণটি এসকিউএল সার্ভারে বা এমনকি নেট থেকেও পাওয়া যায় না (অন্তত নেটিভ নয়) যদিও উভয়ই মূল ইউনিকোডের নির্দিষ্টকরণের সাথে মেনে চলে।

আইসিইউ প্রজেক্ট (ইউনিকোড আন্তর্জাতিক সামগ্রী) যে কার্যকরী এই কার্যকারিতা, এবং এমনকি এটি একটি অনলাইন ডেমো সি / সি ++ এবং জাভা লাইব্রেরি একটি সেট। এবং "সম্পর্কিত প্রকল্পগুলি" এর অধীনে একটি। নেট প্রকল্পের একটি লিঙ্ক রয়েছে যা আইসিইউ লাইব্রেরির জন্য একটি সিওএম অবজেক্ট র‌্যাপার বলে মনে হচ্ছে যা এই কার্যকারিতাটি পরিচালিত কোডের সাথে প্রকাশ করতে দেয়। তবে। নেট প্রকল্পটি এখনও সক্রিয় আছে কিনা তা পরিষ্কার নয়।

তবে এই আচরণটি কার্যকর অবস্থায় দেখতে আইসিইউ কোলেশন ডেমোতে যান

বাম পাশের ইনপুট পাঠ্য অঞ্চলে নিম্নলিখিতটি আটকে দিন :

1
2
10B
6
11
10A
3
10

সমস্ত বিকল্প "ডিফল্ট" এ সেট করুন। sortবোতামের ডানদিকে "ইনপুট লাইন নম্বর" বিকল্পটি পরীক্ষা করে দেখুন এবং নিশ্চিত করুন যে "ডিফার্ফ শক্তি" অপশনটি চেক করা নেই।

sortবোতামটি ক্লিক করুন এবং আপনার নিম্নলিখিতটি ফিরে পাওয়া উচিত:

[1] 1
[8] 10
[6] 10A
[3] 10B
[5] 11
[2] 2
[7] 3
[4] 6

একটি সাধারণ স্ট্রিং সাজানোর সময় এটিই প্রত্যাশা করা উচিত এবং আপনি এসকিউএল সার্ভারে যা দেখছেন।

এখন, রেডিও বোতামগুলির সিরিজের বোতামের ঠিক উপরে sort, দ্বিতীয় সারিতে "সংখ্যাসূচক" লেবেলযুক্ত রয়েছে। "চালু" রেডিও বোতামটি নির্বাচন করুন।

sortআবার বোতামটি ক্লিক করুন এবং আপনার নিম্নলিখিতটি ফিরে পাওয়া উচিত:

[1] 1
[2] 2
[7] 3
[4] 6
[8] 10
[6] 10A
[3] 10B
[5] 11

সংখ্যার অংশটি যখন স্ট্রিংয়ের মাঝখানে থাকে তখন এটি কাজ করে কিনা? ঠিক আছে, বাম পাশের ইনপুট পাঠ্য অঞ্চলে নিম্নলিখিতটি আটকে দিন (পূর্ববর্তী তালিকার পরিবর্তে):

Script - 1.sql
Script - 2.sql
Script - 10B.sql
Script - 6.sql
Script - 11.sql
Script - 10A.sql
Script - 3.sql
Script - 10.sql

নিশ্চিত হয়ে নিন যে সংখ্যাসূচক সেটিংটি এখনও "চালু" আছে। sortআবার বোতামটি ক্লিক করুন এবং আপনার নিম্নলিখিতটি ফিরে পাওয়া উচিত:

[1] Script - 1.sql
[2] Script - 2.sql
[7] Script - 3.sql
[4] Script - 6.sql
[8] Script - 10.sql
[6] Script - 10A.sql
[3] Script - 10B.sql
[5] Script - 11.sql

এটি অন্য জায়গায় দেখতে চান? আপনার হার্ডড্রাইভে একটি ফোল্ডার তৈরি করুন, সি: \ টেম্পল \ বাছাই like এর মতো কিছু এবং সেই একই "স্ক্রিপ্ট -..." নামের খালি ফাইল তৈরি করুন। একটি কি DIRকমান্ড উইন্ডোতে এবং আপনি স্ট্যান্ডার্ড শ্রেণীবিভাজন দেখতে হবে। তবে উইন্ডোজ এক্সপ্লোরারে ফাইলগুলির তালিকা দেখার সময় আপনি "সংখ্যাসূচক" বিকল্পটি ব্যবহার করে তালিকাটি সাজানো দেখতে পাবেন :-)।


এফওয়াইআই, আইসিইউ কোলেশনগুলির জন্য পোস্টগ্রেস 10 লাভ করে। পিটার আইজেন্ট্রাউটের এই ব্লগ পোস্টটি দেখুন ।
বেসিল Bourque

@ বাসিলবার্ক PG10 সম্পর্কে উল্লেখ করার জন্য ধন্যবাদ। সেই ব্লগ পোস্টটি শেষে বলেছে যে "আইসিইউ এই অঞ্চলে প্রচুর কার্যকারিতা সরবরাহ করে যা আমরা এখনও পোস্টগ্রেএসকিউএল-এর মাধ্যমে প্রকাশ করি না case কেস-সংবেদনশীল বাছাই, অ্যাকসেন্ট-সংবেদনশীল বাছাই এবং সম্পূর্ণভাবে একটি কলেজকে কাস্টমাইজ করার জন্য বিকল্প রয়েছে options দেখুন ভবিষ্যতে পোস্টগ্রিজ এসকিউএল প্রকাশের জন্য তাদের জন্য "" সুতরাং এটির প্রথম / বর্তমান প্রয়োগে এটি আমার উত্তরের তথ্যের কোনও পরিবর্তন করে না। যদি ভবিষ্যতের কোনও অফার সংখ্যার বাছাইয়ের অনুমতি দেয় তবে আমি আমার উত্তরে এটি উল্লেখ করব, তবে পাদটীকা হিসাবে এই প্রশ্নটি এসকিউএল সার্ভার-নির্দিষ্ট।
সলোমন রুটজকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.