কেন 0 খালি স্ট্রিংয়ের সমান?


23

নিম্নলিখিত T-SQLবিবৃতিটি কেন 1সত্য (সত্য) তা খুঁজে পেতে আমার কিছু সহায়তা দরকার :

SELECT IIF( 0 = '', 1, 0)

আমি অনুমান করি যে কারওর ANSIমতো বিকল্প SET ANSI_NULLSবা অন্য কোনও কিছু পরিবর্তিত হয়েছে যা আচরণের কারণ হয়ে উঠছে।

আমার সমস্যাটি হ'ল আমি কিছু মানগুলিতে যোগদান করছি এবং চূড়ান্ত সারিতে আমার মান রয়েছে যা সংযুক্ত 0এবং ''মান রয়েছে যা সঠিক নয়।

উত্তর:


31

এটি কেবল নথিভুক্ত আচরণ। আমি মনে করি না যে কেউ সেটিংসের সাথে গণ্ডগোল করেছে।

এমএসডিএন-তে ডেটা টাইপের নজির দেখুন ।

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

মন্তব্যে উল্লিখিত হিসাবে খালি স্ট্রিংটি কোনও সংখ্যার প্রকারে 0 তে রূপান্তরিত হয় এবং 1900-01-01 00: 00: 00.000 এ তারিখে রূপান্তরিত হয়।

সম্পাদনা: আমি মনে করি আপনার আসল সমস্যাটি হ'ল আপনার নকশাটি যাতে আপনাকে আলাদা ডেটা টাইপের ক্ষেত্রে যোগ দিতে হয়। এটিকে ঘুরে দেখার একমাত্র উপায় হ'ল আপনার যোগদানের ধারাটিতে রূপান্তর করা যা ক্যোয়ারী কার্য সম্পাদনকে ক্ষতিগ্রস্থ করবে। মূল সমস্যাটি সম্ভবত স্কিমা ডিজাইনের সাথে

সম্পাদনা: আড্ডায় সরানো হয়েছে এমন মন্তব্যে প্রচুর আলোচনা হয়েছিল। তবে অযৌক্তিক মনে হতে পারে, খালি স্ট্রিংটিকে অন্য ডেটা ধরণের রূপান্তর করা স্বেচ্ছাসেবী মানগুলি তৈরি করে।

এই কোড:

SELECT CONVERT(int, '')
SELECT CONVERT(float, '')
SELECT CONVERT(date, '')
SELECT CONVERT(datetime, '')

এই আউটপুট উত্পাদন:

0
0
1900-01-01
1900-01-01 00:00:00.000

আপনি তখন আশা করতে পারেন যে এই আচরণটি অন্যান্য পূর্ববর্তী ডেটাটাইপগুলির মধ্যে সামঞ্জস্যপূর্ণ এবং প্রত্যাশা করতে পারে যে 0 এ তারিখে রূপান্তর করা একই স্বেচ্ছাচারিত মান উত্পন্ন করবে তবে তা হয় না।

SELECT CONVERT(date, 0)

উত্পাদন

ডেটা টাইপ int থেকে তারিখে স্পষ্ট রূপান্তর অনুমোদিত নয়।

কারণ এটি কোনও সমর্থিত রূপান্তর নয়

যখন

SELECT CONVERT(datetime, 0)

রিটার্নস

জানুয়ারী, 01 1900 00:00:00 |

হ্যাঁ, এটি অদ্ভুত এবং স্বেচ্ছাসেবী, তবে আসলে নথিভুক্ত এবং ব্যাখ্যাযোগ্য।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই উত্তর সম্পর্কে কথোপকথন চ্যাট সরানো হয়েছে
পল হোয়াইট GoFundMonica বলেছেন

2
আচরণ CAST('' AS INT)-> 0 নথিভুক্ত কোথাও? রেফারেন্স যুক্ত করলে ভাল লাগবে।
সালমান এ

2
@SalmanA: এটা উচিত "রূপান্তর ক্যারেক্টার ডেটা" বিভাগে নথিভুক্ত করা গৃহস্থালির কাজ / varchar ডকুমেন্টেশন , কিন্তু এটা বর্তমানে হয় না। এটি অন্তর্ভুক্ত করার জন্য আমি একটি প্রতিক্রিয়া মন্তব্য রেখেছি।
হেইনজি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.