برای جدول employees با ستونهای id, first_name, middle_name, last_name یک پرسوجو بنویسید که برای هر ردیف شناسه و کمترین مقدار رشتهای (از نظر ترتیب الفبایی) بین سه نام را در ستون min_name نمایش دهد و مقادیر NULL را نادیده بگیرد، از تابع LEAST استفاده کنید.
1.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 01:53 0.0
تابع LEAST در MySQL کوچکترین مقدار از بین آرگومانها را برمیگرداند اما اگر یکی از آرگومانها NULL باشد، نتیجه NULL خواهد شد؛ برای نادیده گرفتن NULLها میتوانید با IFNULL یک مقدار جایگزین بزرگ (مثلاً 'zzzzzz') قرار دهید یا نامها را با LOWER نرمال کنید تا مقایسه بدون حساسیت به حروف بزرگ/کوچک انجام شود. این پرسوجو در چارچوب MySQL و مباحث Functions & Expressions و Data Querying نوشته میشود — مثلاً SELECT id, LEAST(IFNULL(LOWER(first_name),'zzzzzz'), IFNULL(LOWER(middle_name),'zzzzzz'), IFNULL(LOWER(last_name),'zzzzzz')) AS min_name FROM employees;
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
نکته: در MySQL، تابع LEAST با وجود مقدار NULL در هر آرگومان، نتیجه NULL میدهد، پس باید NULLها را با IFNULL/COALESCE قبل از مقایسه جایگزین کرد. برای نادیدهگرفتن حساسیت حروف، میتوانید نامها را به LOWER تبدیل کنید یا از COLLATION مناسب استفاده کنید. توجه کنید که جایگزینی NULL با مقدار بزرگی مثل 'zzzzzz' ممکن است باعث شود که رکوردی که همه نامها NULL دارند، min_name برابر با 'zzzzzz' شود؛ اگر این رفتار مطلوب نیست، از CASE یا شرط NULL استفاده کنید تا نتیجه دقیق حفظ شود. نمونه الگوی پیشنهادی در توضیحات شما قابل استفاده است: SELECT id, LEAST(IFNULL(LOWER(first_name),'zzzzzz'), IFNULL(LOWER(middle_name),'zzzzzz'), IFNULL(LOWER(last_name),'zzzzzz')) AS min_name FROM employees;
گزارش