Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 合并日期和字符串上的附加结果_Mysql_Mysql Workbench - Fatal编程技术网

Mysql 合并日期和字符串上的附加结果

Mysql 合并日期和字符串上的附加结果,mysql,mysql-workbench,Mysql,Mysql Workbench,首先,我想澄清一下,我已经阅读了这个问题。这里描述的问题与我的问题非常相似,但与一个已经解决的bug有关 在通过运行在Windows上的MySQL WorkBench 5.2.47 C查询MySQL服务器(运行在Linux上的版本14.14)后,我得到了奇怪的结果 问题在于,在日期和字符串字段列表上合并的选择返回的是BLOB而不是日期。比如说 SET @dat='20130812'; SELECT COALESCE(dateA, @dat) FROM table1; 我知道通过

首先,我想澄清一下,我已经阅读了这个问题。这里描述的问题与我的问题非常相似,但与一个已经解决的bug有关

在通过运行在Windows上的MySQL WorkBench 5.2.47 C查询MySQL服务器(运行在Linux上的版本14.14)后,我得到了奇怪的结果

问题在于,在日期和字符串字段列表上合并的选择返回的是BLOB而不是日期。比如说

SET @dat='20130812';
SELECT COALESCE(dateA, @dat) FROM table1;        
我知道通过将COALESCE转换为日期类型可以解决此问题:

SELECT CAST(COALESCE(dateA,$dat) AS DATE) FROM table1;
也可以通过铸造@dat来解决:

SELECT COALESCE(dateA,CAST(@dat AS DATE)) FROM table1;
在我看来,它与内部类型转换有关,但是,当客户端是mysql控制台客户端时,为什么我的第一个查询可以工作?(如上文所述)

客户端是否执行某种类型的查询预处理?在这种情况下,它不应该是所有客户的共同点吗


我过去认为SQL Server从客户端接收原始查询(文本),现在我意识到这根本不是事实。在客户端执行什么级别的预处理?

最后,我似乎正确地认为不难的预处理是在客户端完成的

不同之处在于数据可视化:apply-on-COALESCE因此,当其输入列表中的某些元素是日期,而其他元素是字符串时,这些规则使所有元素隐式转换为包含每个日期字符串表示的blob

如果其中一个参数是TIMESTAMP或DATETIME列,而另一个参数是常量,则在执行比较之前,该常量将转换为时间戳。这样做是为了更加友好。请注意,对于IN()中的参数,不会执行此操作!为了安全起见,在进行比较时始终使用完整的日期时间、日期或时间字符串。例如,若要在使用带有日期或时间值的BETWEEN时获得最佳结果,请使用CAST()将值显式转换为所需的数据类型

另一方面,mysql控制台客户端会自动将该BLOB显示为文本,而mysql workbench使用其BLOB表示

如果打开:

可以读取为文本(默认情况下,mysql控制台客户端就是这样做的):

在我看来,基于我上面引用的MySQL参考文本,解决这个问题的最佳方法是将date元素强制转换为date。这样,就不会进行隐式转换,COALESCE将返回一个日期类型值