ISNUMERIC
ফাংশন কিছু অপ্রত্যাশিত আচরণ হয়েছে। এমএসডিএন ডকুমেন্টেশন বলে:
ISNUMERIC
1 প্রদান করে যখন ইনপুট এক্সপ্রেশনটি একটি বৈধ সংখ্যাযুক্ত ডেটা টাইপের মূল্যায়ন করে; অন্যথায় এটি 0 ফেরত দেয়। বৈধ সংখ্যাযুক্ত ডেটা টাইপগুলির মধ্যে নিম্নলিখিতগুলির অন্তর্ভুক্ত থাকে: ইনট, বিগিন্ট, স্মলিন্ট, টিনিনেন্ট, দশমিক, সংখ্যাসূচক, অর্থ, ছোটমণি, ভাসমান, আসল ।
এবং এটির একটি পাদটীকাও রয়েছে:
ISNUMERIC
কিছু অক্ষরের জন্য 1 প্রদান করে যা সংখ্যা নয়, যেমন প্লাস (+), বিয়োগ (-) এবং বৈধ মুদ্রার চিহ্ন যেমন ডলারের চিহ্ন ($)। মুদ্রা প্রতীকগুলির একটি সম্পূর্ণ তালিকার জন্য, অর্থ এবং স্মার্টমনি (লেনদেন-এসকিউএল) দেখুন ।
ঠিক আছে, সুতরাং +
, -
এবং তালিকাভুক্ত মুদ্রার প্রতীকগুলি সংখ্যা হিসাবে বিবেচিত হবে বলে আশা করা হচ্ছে। এ পর্যন্ত সব ঠিকই.
বিজোড় অংশ জন্য। প্রথমত, লিঙ্কযুক্ত নিবন্ধ থেকে কিছু মুদ্রার প্রতীক সংখ্যাযুক্ত নয় , সহ:
- ইউরো-কারেন্সি সাইন, হেক্স 20 এ 0:
₠
- নাইরা সাইন, হেক্স 20 এ 6:
₦
- রিয়াল সাইন, হেক্স এফডিএফসি:
﷼
এটি অদ্ভুত, এবং কেন আমি তা খুঁজে বের করতে পারি না? এই সংস্করণ বা পরিবেশ নির্ভর?
যাইহোক, জিনিসগুলি অস্থির হয়ে ওঠে। আমি এখানে ব্যাখ্যা করতে পারি না এমন আরও কয়েক জন এখানে রয়েছে:
/
সংখ্যাসূচক নয়, তবে\
এটি ( হু ?! )REPLICATE(N'9', 308)
সংখ্যাগত, কিন্তুREPLICATE(N'9', 309)
হয় না
প্রথম এবং সর্বাধিক প্রাথমিক প্রশ্ন: উপরোক্ত মামলাগুলি কী ব্যাখ্যা করে? আরও গুরুত্বপূর্ণ যদিও: পিছনে যুক্তিটি কীISNUMERIC
, তাই আমি নিজেই সমস্ত ঘটনা ব্যাখ্যা / পূর্বাভাস দিতে পারি?
জিনিসগুলি পুনরুত্পাদন করার জন্য এখানে একটি ভাল উপায়:
DECLARE @tbl TABLE(txt NVARCHAR(1000));
INSERT INTO @tbl (txt)
VALUES (N''), (N' '), (N'€'), (N'$'), (N'$$'),
(NCHAR(8356)), (NCHAR(8352)), (NCHAR(8358)), (NCHAR(65020)),
(N'+'), (N'-'), (N'/'), (N'\'), (N'_'), (N'e'), (N'1e'), (N'e1'), (N'1e1'),
(N'1'), (N'-1'), (N'+1'), (N'1+1'), (N'⒈'), (N'🄂'), (N'¹'), (N'①'), (N'½'),
(N'🎅'), (REPLICATE(N'9', 307)), (REPLICATE(N'9', 308)), (REPLICATE(N'9', 309)),
(REPLICATE(N'9', 310));
SELECT UNICODE(LEFT(txt, 1)) AS FirstCharAsInt,
LEN(txt) AS TxtLength,
txt AS Txt,
ISNUMERIC(txt) AS [ISNUMERIC]
FROM @tbl;
আমি যখন আমার স্থানীয় এসকিএল সার্ভার 2012 বাক্সে এটি চালিত করি তখন আমি নিম্নলিখিত ফলাফলগুলি পাই:
FirstCharAsInt TxtLength Txt ISNUMERIC
--------------- ---------- --------- ----------
NULL 0 0
32 0 0
8364 1 € 1
36 1 $ 1
36 2 $$ 0
8356 1 ₤ 1
8352 1 ₠ 0 --??
8358 1 ₦ 0 --??
65020 1 ﷼ 0 --??
43 1 + 1
45 1 - 1
47 1 / 0
92 1 \ 1 --??
95 1 _ 0
101 1 e 0
49 2 1e 0
101 2 e1 0
49 3 1e1 1
49 1 1 1
45 2 -1 1
43 2 +1 1
49 3 1+1 0
9352 1 ⒈ 0
55356 2 🄂 0
185 1 ¹ 0
9312 1 ① 0
189 1 ½ 0
55356 2 🎅 0
57 307 /*...*/ 1
57 308 /*...*/ 1 --??
57 309 /*...*/ 0 --??
57 310 /*...*/ 0
NCHAR(0) - NCHAR(65535)
আমি 112 এর ত্রুটি দেখতে পাচ্ছি। অক্ষরগুলি অন্তর্ভুক্ত করা হয় যেমন ₁,₂,₃,4,5,6,7,8,9
সংখ্যাসূচক দেখায় তবে আমার জন্য সফলভাবে কোনও কিছুতে কাস্ট করেন না। ফিডল
0
পাঁচটি মানের জন্য রিপোর্ট করে যা আসলে জরিমানা করেmoney
। অন্যদের সঠিক মনে হয়। এসকিউএল ফিডল