ISDATE() equivalent for MySQL

后端 未结 5 1364
迷失自我
迷失自我 2021-01-12 01:45

I have a line of code for SQL server which takes a date listed as \"YYYYMMDD\" where the DD is 00 and converts the 00 to 01 so that it works with datetime. I would like to

5条回答
  •  终归单人心
    2021-01-12 02:32

    One possibility, that allows argument to be string, integer or date:

    WHERE DAYNAME(dt) IS NOT NULL
    

    These valid dates return 'Tuesday':

    SELECT IFNULL(DAYNAME('2016-06-21 18:17:47') , '');
    SELECT IFNULL(DAYNAME('2016-06-21') , '');
    

    These invalid dates return '' (empty string):

    SELECT IFNULL(DAYNAME('0000-00-00 00:00:00') , '');
    SELECT IFNULL(DAYNAME('2016-06-32 18:17:47') , '');
    SELECT IFNULL(DAYNAME(NULL) , '');
    SELECT IFNULL(DAYNAME(10) , '');
    

    It seems that DAYNAME is 2x faster in mysql 5.6 than STR_TO_DATE:

    SELECT benchmark(10000000, DAYNAME('2016-06-21 18:17:47'))
    1 row(s) returned   3.215 sec / 0.0000072 sec
    
    SELECT benchmark(10000000, STR_TO_DATE('2016-06-21 18:17:47', '%d,%m,%Y'))
    1 row(s) returned   7.905 sec / 0.0000081 sec
    

    And I suppose that if the argument is date (rather than eg. string), the performance is better.

提交回复
热议问题