কম্পিউটার টিউটোরিয়াল

MySQL-এ তারিখ অনুযায়ী সর্ট করা কিন্তু খালি তারিখগুলো শেষে রাখা

ORDER BY ক্লজ এবং IS NULL প্রপার্টি ব্যবহার করে তারিখ অনুযায়ী সর্ট করুন এবং খালি তারিখগুলো শেষে রাখুন। সিনট্যাক্স নিচে দেওয়া হলো:

SELECT *FROM yourTableName ORDER BY (yourDateColumnName IS NULL), yourDateColumnName DESC;

উপরের সিনট্যাক্সে, প্রথমে NULL সর্ট হবে তারপর তারিখ। এটি বুঝতে একটি টেবিল তৈরি করা যাক। টেবিল তৈরির কোয়েরি:

mysql> create table DateColumnWithNullDemo 
-> ( 
-> Id int NOT NULL AUTO_INCREMENT, 
-> LoginDateTime datetime, 
-> PRIMARY KEY(Id) 
-> ); Query OK, 0 rows affected (0.84 sec)

ইনসার্ট কমান্ড দিয়ে কিছু রেকর্ড ইনসার্ট করা যাক। কোয়েরিটি হলো:

mysql> insert into DateColumnWithNullDemo(LoginDateTime) values(date_add(now(),interval -1 year)); Query OK, 1 row affected (0.15 sec) mysql> insert into DateColumnWithNullDemo(LoginDateTime) values(NULL); Query OK, 1 row affected (0.17 sec) mysql> insert into DateColumnWithNullDemo(LoginDateTime) values(NULL); Query OK, 1 row affected (0.12 sec) mysql> insert into DateColumnWithNullDemo(LoginDateTime) values(now()); Query OK, 1 row affected (0.18 sec) mysql> insert into DateColumnWithNullDemo(LoginDateTime) values(curdate()); Query OK, 1 row affected (0.23 sec) mysql> insert into DateColumnWithNullDemo(LoginDateTime) values('2017-08-25 15:30:35'); Query OK, 1 row affected (0.14 sec) mysql> insert into DateColumnWithNullDemo(LoginDateTime) values(NULL); Query OK, 1 row affected (0.15 sec) mysql> insert into DateColumnWithNullDemo(LoginDateTime) values('2016-12-25 16:55:55'); Query OK, 1 row affected (0.15 sec) mysql> insert into DateColumnWithNullDemo(LoginDateTime) values(NULL); Query OK, 1 row affected (0.22 sec) mysql> insert into DateColumnWithNullDemo(LoginDateTime) values('2014-11-12 10:20:23'); Query OK, 1 row affected (0.14 sec) mysql> insert into DateColumnWithNullDemo(LoginDateTime) values('2020-01-01 06:45:23'); Query OK, 1 row affected (0.23 sec)

সিলেক্ট স্টেটমেন্ট দিয়ে সব রেকর্ড দেখানো যাক। কোয়েরিটি হলো:

mysql> select *from DateColumnWithNullDemo;

আউটপুট নিচে দেওয়া হলো:

+----+---------------------+ | Id | LoginDateTime | +----+---------------------+ | 1 | 2018-01-29 17:07:20 | | 2 | NULL | | 3 | NULL | | 4 | 2019-01-29 17:07:54 | | 5 | 2019-01-29 00:00:00 | | 6 | 2017-08-25 15:30:35 | | 7 | NULL | | 8 | 2016-12-25 16:55:55 | | 9 | NULL | | 10 | 2014-11-12 10:20:23 | | 11 | 2020-01-01 06:45:23 | +----+---------------------+ 11 rows in set (0.00 sec)

NULL মানগুলো শেষে রাখে এবং তারিখ ডেসেন্ডিং অর্ডারে সর্ট করার কোয়েরি নিচে দেওয়া হলো:

mysql> select *from DateColumnWithNullDemo 
-> order by (LoginDateTime IS NULL), LoginDateTime DESC;

আউটপুট নিচে দেওয়া হলো:

+----+---------------------+ | Id | LoginDateTime | +----+---------------------+ | 11 | 2020-01-01 06:45:23 | | 4 | 2019-01-29 17:07:54 | | 5 | 2019-01-29 00:00:00 | | 1 | 2018-01-29 17:07:20 | | 6 | 2017-08-25 15:30:35 | | 8 | 2016-12-25 16:55:55 | | 10 | 2014-11-12 10:20:23 | | 2 | NULL | | 3 | NULL | | 7 | NULL | | 9 | NULL | +----+---------------------+ 11 rows in set (0.00 sec)

ব্যাখ্যা: (LoginDateTime IS NULL) এক্সপ্রেশনটি NULL ভ্যালুর জন্য 1 (true) এবং নন-নাল ভ্যালুর জন্য 0 (false) রিটার্ন করে। ORDER BY এসেন্ডিং অর্ডারে সর্ট করে, তাই 0 (নন-নাল) আগে আসে, তারপর 1 (নাল)। তারপর দ্বিতীয় কী হিসেবে LoginDateTime DESC দিয়ে তারিখ ডেসেন্ডিং এ সর্ট হয়েছে। ফলস্বরূপ নন-নাল তারিখগুলো নতুন থেকে পুরনো ক্রমে, এবং সব NULL শেষে এলেছে।

  1. MySQL-এ কলামের নাম খুঁজে বের করা

  2. MySQL-এ ডেটা ফরম্যাট আপডেট করা (STR_TO_DATE)

  3. MySQL-এ টাইমস্ট্যাম্প DESC-এ সাজাতে '0000-00-00 00:00:00' কে প্রথমে রাখা

  4. MySQL-এ LENGTH() ফাংশন ব্যবহার করে খালি স্ট্রিংকে NULL এ আপডেট করা