2017-04-25 65 views
2

我有一个数据,所有列类型为text甚至日期也存储在文本类型列中。现在,当我使用select查询来访问列的工作发现,但是当我试图对该列执行任何日期操作时,它总是返回null。MYSQL:选择查询返回空的DATE函数

表:

enter image description here

如果正在运行的查询select column_14 from mytable where id = 2其工作正常,但当我试图找到今天的日期和column_14的区别其总是返回null

查询运行:

select DATEDIFF(NOW(),STR_TO_DATE(column_14,"%y-%m-%d")) from `mytable` where id = 2 

enter image description here

任何人都可以告诉我什么是我的查询错误?

结构视图

enter image description here

+0

使用此,DATEDIFF(NOW(),DATE(column_14)) –

+0

相同的结果..... –

+0

您的日期列有ymd格式,因此请尝试一次,如DATEDIFF(NOW(),column_14)不带DATE()。 –

回答

2

应该%Y而不是%y.%Y需要4位数的年份。

DATEDIFF(NOW(),STR_TO_DATE(column_14,"%Y-%m-%d")

+0

我同意你,但它总是返回空 –

+0

即使我使用简单的日期()'它返回'null' –

+0

它只是一个标题 –

1

,如果你选择了错误的格式或功能检测到某个范围的月或日数的STR_TO_DATE将返回空值。在你的例子中,你选择了一个错误的格式%y应该是%Y。以下是可能发生的一些示例。 (注:STR_TO_DATE差这一点,并不会检查多少天了一个月的有效期)

MariaDB [sandbox]> create table t (dt text); 
Query OK, 0 rows affected (0.28 sec) 

MariaDB [sandbox]> insert into t values ('2017-13-01'),('2017-04-31'),('2017-04-33'),('2017-04-03'),('birth_date'); 
Query OK, 5 rows affected (0.02 sec) 
Records: 5 Duplicates: 0 Warnings: 0 

MariaDB [sandbox]> 
MariaDB [sandbox]> select str_to_date(dt,'%y-%m-%d') Invalid_year_format, 
    -> str_to_date(dt,'%Y-%m-%d') Valid_year_format_MM_and_DD, 
    -> datediff(now(),str_to_date(dt,'%Y-%m-%d')) datediff_examples 
    -> from t; 
+---------------------+-----------------------------+-------------------+ 
| Invalid_year_format | Valid_year_format_MM_and_DD | datediff_examples | 
+---------------------+-----------------------------+-------------------+ 
| NULL    | NULL      |    NULL | 
| NULL    | 2017-04-31     |    -6 | 
| NULL    | NULL      |    NULL | 
| NULL    | 2017-04-03     |    22 | 
| NULL    | NULL      |    NULL | 
+---------------------+-----------------------------+-------------------+ 
5 rows in set, 11 warnings (0.00 sec) 
+0

获得仍然相同的输出...即使在正确的'%Y-%m-% d'此 –

+0

如果表是myisam或innodb,则没有区别。正如我所说的问题是数据不起作用。 –

+0

我得到了问题..我的数据有错误。我只是出口一个单一的行,它的'\ 0'与日期和'REPLACE'之后,我可以执行日期操作..谢谢 –